在linux下動態庫檔案字尾為.so
, 其中so代表 shared object,即共享目標檔案。
動態庫的特點就是在系統記憶體中,只會存在動態庫的乙個副本。例如:程式a,b允許時都需要動態庫lib.so
的支援。當a程式執行時,由於系統記憶體中沒有發現lib.so
庫,所以需要載入lib.so
。此時b程式執行,發現系統記憶體中已經存在lib.so
,所以不需要載入lib.so
。可以認為可執行程式並沒包含動態庫的**,只是包含了對動態庫的引用。
編寫原始檔
編譯生成動態庫
使用庫
先通過乙個小例子來生成乙個動態庫:
// add.c
#include
#include "add.h"
int add(int a, int b)
// add.h
#ifndef add_h
#define add_h
int add(int a, int b);
#endif
至此將會在當前目錄下生成gcc -fpic
-shared
-c add.c -o libadd.so
libadd.so
動態庫檔案。下面來解釋一下生成動態庫的各個引數:
-fpic
中的pic(position-independent code),意指位置無關的**。該選項告訴編譯器編譯生成位置無關的目標檔案。
-shared
該選項屬於鏈結選項,產生乙個共享的目標檔案。該引數必須和-fpic或-fpic一起使用。
// main.c
#include
#include "add.h"
int main()
至此生成以來動態庫gcc -o main -l
.-ladd
libadd.so
的可執行檔案main
,執行main程式就能看到結果為3。
編譯選項解釋:
-llibrary
-l選項後面跟庫名(注意庫名指的是lib
和.so
中間的部分,例如libadd.so的庫名是add),該選項是告訴gcc要鏈結add庫。
-ldir
新增一條搜尋-llibrary
中的library的路徑。dir為library庫所在的目錄。
linux 下建立靜態庫和動態庫
4.生成庫檔案 編寫函式 編譯生成各目標檔案 用ar檔案對目標檔案歸檔,生成靜態庫檔案。注意歸檔檔案名必須以lib打頭 可檢視庫檔案命名規則 使用要點 在gcc的 i引數後加上靜態庫標頭檔案的路徑。在gcc的 l引數後加上庫檔案所在目錄 在gcc的 l引數後加上庫檔名,但是要去掉lib和.a副檔名。...
linux下建立靜態庫與動態庫
靜態庫 編寫好c原始檔,裡面只有函式的實現。要呼叫的檔案比如是main.c,在檔案裡宣告c原始檔裡的庫函式名。1 首先 gcc c hello.c 生成hello.o 2 ar crs libhello.a hello.o 3 gcc o main main.c l.lhello l後面跟著庫的路徑...
linux系統下動態庫的建立
需求 以建立乙個加減法功能的動態庫為例。1 分別建立乙個加減法的庫函式 add.c,sub.c int add int a,int b int sub int a,int b 2 將庫函式檔案生成目標檔案 gcc c sub.c add.c fpic add.o,sub.o 3 將目標檔案分裝成庫 ...