1. 程式人生 > >linux下靜動態庫Makefile的編寫和應用

linux下靜動態庫Makefile的編寫和應用

前言

在linux下做專案,難免會有對庫的封裝,需要把自己編寫的程式編譯成靜動態庫給其他人提供介面,這時候最重要的就是Makefile的編寫。

一、動態庫Makefile的編寫和使用

1、動態連結

聯結器在連結時僅僅建立與所需庫函式的之間的連結關係,在程式執行時才將所需資源調入可執行程式,也就是你在執行應用程式的時候一定要把你編譯後的.so配置到你執行程式環境下,直接拷貝到/lib/目錄下也是可以的。

2、動態庫Makefile的編寫

CC=gcc//gcc 編譯器,如果要在ARM上應用就需要交叉編譯器
CCFLAGS= -g -Wall
SRC:= $(wildcard  *.c ) //當前資料夾下所有.c檔案,如果還有其他.c檔案,也放到括號裡面  
OBJS:=$(patsubst %.c,%.o,$(SRC)) //.c檔案連結成的.o檔案
INCLDPATH=-I. //所需要的標頭檔案目錄   
LIB_OBJECT = ./libyuvtorgb.so//動態庫所在目錄和名字
.PHONY:all
all:$(LIB_OBJECT)
$(LIB_OBJECT):$(OBJS)    
$(CC) -shared -o $(LIB_OBJECT) $(OBJS)
%.o : %.c  
$(CC) -fPIC  -c $(CCFLAGS) $(INCLDPATH) -o 
[email protected]
$< clean: rm -rf $(LIB_OBJECT) $(OBJS)

3、動態庫的使用

1)庫函式、標頭檔案均在當前目錄下
 # gcc -o my_test mytest.c libtestlib.so
2)庫函式、標頭檔案假設在/opt目錄
 # gcc - - o mytest mytest.c -L/opt  -lltestlib -I/opt

二、靜態庫Makefile的編寫和使用

1、靜態連結

      由連結器在連結時將庫的內容加入到可執行程式中,執行執行程式的時候直接就可以執行,但連結出的應用程式比較大。

2、靜態庫Makefile的編寫

CC=gcc                  //gcc 編譯器,如果要在ARM上應用就需要交叉編譯器。
CCFLAGS= -g -Wall
SRC:= $(wildcard  *.c ) //當前資料夾下所有.c檔案,如果還有其他.c檔案,也放到括號裡面  
OBJS:=$(patsubst %.c,%.o,$(SRC)) //.c檔案連結成的.o檔案
INCLDPATH=-I.                //所需要的標頭檔案目錄
AR:=ar rc    //RC連結成靜態庫 
LIB_OBJECT = ./libyuvtorgb.a //靜態庫所在目錄和名字

.PHONY:all
all:$(LIB_OBJECT)
$(LIB_OBJECT):$(OBJS)    
$(AR)   $(LIB_OBJECT) $(OBJS)  
%.o : %.c  
$(CC)  -c $(CCFLAGS) $(INCLDPATH) -o 
[email protected]
$< clean: rm -rf $(LIB_OBJECT) $(OBJS)

3、動態庫的使用

1)庫函式、標頭檔案均在當前目錄下
# gcc -o my_test mytest.c libtestlib.a
2)庫函式、標頭檔案假設在/opt目錄
# gcc - - o mytest mytest.c -L/opt  -lltestlib -I/opt


注意:當靜態庫與動態庫重名時,系統會優先連線動態庫,或者我們可以加入-static指定使用靜態庫

相關推薦

linux動態Makefile編寫應用

前言 在linux下做專案,難免會有對庫的封裝,需要把自己編寫的程式編譯成靜動態庫給其他人提供介面,這時候最重要的就是Makefile的編寫。 一、動態庫Makefile的編寫和使用 1、動態連結 聯結器在連結時僅僅建立與所需庫函式的之間的連結關係,在程式執行

如何理解Linux動態概念,靜態概念,通俗易懂的解釋如下:

動態庫和靜態庫都是一組函式集合,打包在一起供應用程式呼叫,區別是: 靜態庫名稱一般為xxx.a,在編譯時和應用程式連結在一起,這樣的應用程式佔用空間較大。 動態庫名稱一般為xxx.so,對於動態庫即可以在編譯時連結,也可以使用dlopen()/dlsy

嵌入式 Linux動態原理使用

1.編寫庫的標頭檔案和原始檔.   2.把所有涉及到的原始檔用如下方式編譯為目標檔案:   #  g++/gcc  -g  -c  -fPIC  -o  library1.o  library1.cpp   #  g++/gcc  -g  -c  -fPIC  -o  library2.o  libra

Linux動態靜態

庫: 在c/c++裡,使用庫(library)的技術,可以將編譯好的符號提供給第三方使用。 1)共享庫(動態庫)share library 2)   靜態庫 static library 一:動態庫

linux建立動態

1.gcc編譯選項 -E : 預處理 .c -> .i -S : 編譯 .i /.c -> .s -c : 彙編 .s -> .o -g : 生成除錯資訊 -O : 優化級別 -O0 -O1 -O2 -O3 -Os -I : 包含一個頭檔案搜尋路徑 -I/home/li

再談Linux動態

為了解決上一篇的部落格《Linux下靜態庫、動態庫的建立和使用》最後留下的問題,今天總結一下Linux下動態庫 版本號的控制。 一、動態庫版本號的組成     對於上一篇部落格中提到的庫檔案libcurl.4.3.0,其中4代表主版本號,3代表次版本號,0代表發

linux執行動態問題 cannot open shared object file: No such file or directory

如果動態庫不在同一級目錄下,則需要將以上檔案的目錄載入到動態庫搜尋路徑中,設定的方式有以下幾種: 一. 將動態庫路徑加入到LD_LIBRARY_PATH環境變數  1.在終端輸入:export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/XXX

linuxso動態一些不為人知的祕密(上)

相關文章 linux 下有動態庫和靜態庫,動態庫以.so為副檔名,靜態庫以.a為副檔名。二者都使用廣泛。本文主要講動態庫方面知識。    基本上每一個linux 程式都至少會有一個動態庫,檢視某個程式使用了那些動態庫,使用ldd命令檢視  # ldd

linux動態

缺點 har clu main.c onf 才會 -o config bashrc 也就是windows下的.dll 1.命名 2.制作 (1)生成與位置無關的.o文件 gcc -fPIC -c *.c -I ../include (2)將.o打包成動態庫(或者叫共享庫

linux檢視動態中的符號

功能 列出.o .a .so中的符號資訊,包括諸如符號的值,符號型別及符號名稱等。所謂符號,通常指定義出的函式,全域性變數等等。 使用 nm [option(s)] [file(s)] 有用的options: -A 在每個符號資訊的前面列印所在物件檔名稱;-C

Linux建立動態

動態庫簡介 在Linux下動態庫檔案字尾為.so, 其中so代表 Shared Object,即共享目標檔案。 動態庫的特點就是在系統記憶體中,只會存在動態庫的一個副本。例如:程式A,B允許時都需要

linux的靜態動態

列表 可執行文件 運行時 打包 文件的 ade 命令 div library 一、linux下的靜態庫 靜態庫中的被調用的函數的代碼會在編譯時一起被復制到可執行文件中去的!!可執行文件在運行不需要靜態庫的存在! 二、linux下動態庫的構建和使用 1、動態庫的構建

靜態連結的編譯與使用 linux動態連結靜態連結到底是個什麼鬼?(一)靜態連結的編譯與使用

linux下的動態連結庫和靜態連結庫到底是個什麼鬼?(一)靜態連結庫的編譯與使用       知識不等於技術,這句話真的是越工作的時間長越深有體會,學習到的知識只有不斷的實踐,才成真正在自已的心裡紮下根,成為自身的一部分,所以無論如何,我希望我的部落格可以

Linux靜態動態的建立使用

Linux下靜態庫、動態庫的建立和使用 Linux庫檔名由:字首lib、庫名和字尾3部分組成,靜態庫通常以.a作為字尾,動態庫以.so作為字尾, Linux下把動態庫叫做共享庫,so即shared object的縮寫。 靜態庫是程式編譯連結時使用,動態庫是程式執行時使用。

LinuxC程式動態的生成呼叫

Linux下C程式動態庫的生成和呼叫 文章目錄 Linux下C程式動態庫的生成和呼叫 1 動態庫的打包和呼叫 2 靜態庫打包和呼叫 3 常用命令 4 gcc 和 g++ 區別 5 編譯和連結的理解

linux封裝函式——動態.so靜態.a(程式碼實現及連結方式)

在linux環境下的連結庫分為靜態連結庫(.a庫)和動態連結庫(.so庫),其作用是把C程式編譯好做成一種可執行連結檔案,主程式檔案呼叫這些程式的函式介面是可以使用a庫或so庫,在主程式中只需要include含有庫中提供的函式介面宣告的標頭檔案即可。所以學會如何

linux靜態動態的製作使用

動態庫與靜態庫本質是二進位制的原始碼,只是人看不懂,對機器沒有影響。 靜態庫的製作和使用 命名規則:  名字一般分為三部分,開頭為“lib”,表示這是一個庫檔案,接下來是想取的名字,最後是字尾“.a”(windows下是lib)。例如:libhello.a 製作步驟:  1.原材料:

Linux靜態動態的製作使用

Linux作業系統支援的庫函式分為;   1.靜態庫:libxxx.a  在編譯時就將庫函式編譯進可執行程式中.      優點.  程式執行環境中不需要外部的函式庫.       缺點: 可執行程

Linux使用gcc進行靜態編譯使用動態連結編譯

/home/plus/demo下有main.c和func.c兩個檔案: func.c: int func(int a) { return a+1; } main.c: #i

linux的共享動態靜態

1.什麼是庫 在windows平臺和linux平臺下都大量存在著庫。本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。 由於windows和linux的本質不同,因此二者庫的二進位制是不相容的。 本文僅限於介紹linux下的庫。 2.庫的種類 linux