Linux下建立動態庫

2021-07-25 12:03:28 字數 1348 閱讀 9363

在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 將目標檔案分裝成庫 ...