Linux動態庫靜態庫的生成

2021-10-06 10:32:29 字數 2092 閱讀 1302

函式庫:

1、便於移植,方便使用

2、保密, 保護智財權

靜態庫:編譯生成靜態庫

編譯生成靜態庫:

1、把.c檔案編譯生成.o檔案

gcc -c add.c 或gcc add.c -c -o add.c

2、把.o檔案編譯生成.a靜態庫

ar -rc libadd.a add.o

3、靜態庫的使用

gcc main.c libadd.a -o project

gcc main.c -o project libadd.a

gcc main.c -o project -i./include -l./lib -ladd

4、執行檔案

./project

動態庫:編譯生成動態庫

1、把.c檔案編譯生成.o動態庫

gcc -fgic -shared add.c -o libadd.so

2、動態庫的使用:

>

`gcc main.c -o project libadd.so

>

> gcc main.c -o project -i./include -l./lib -ladd`

>

(-i./include 表示連線標頭檔案,-l./lib 表示連線動態庫,-ladd表示去掉動態庫檔案字首lib和字尾.so)

3、執行二進位制檔案時:

./project

如果出現以下錯誤:

./main: error while loading shared libraries: libadd.so: cannot open shared object file: no such file or directory
解決方法:

(0)編譯過程中指定動態庫路徑

gcc demo.c libsum/sum.c -o demo -i./libmax -l./libmax -lmax -wl,-rpath=./libmax
如果需要指定多個路徑,使用冒號 : 作為分隔符

gcc demo.c -o demo -wall -i./libmax -l./libmax -lmax -i./libsum -l./libsum -lsum -wl,-rpath=./libmax/:./libsum/

cp libadd.so /lib

(2)臨時設定環境變數ld_library_path:

期嵌入式直播10班/02linux基礎/02/code/test_動態庫

export ld_library_path=$ld_library_path:/mnt/hgfs/gz2019期嵌入式直播10班/02linux基礎/02/code/test_動態庫

(3)永久設定:

export ld_library_path=$ld_library_path:/mnt/hgfs/gz2019期嵌入式直播10班/02linux基礎/02/code/test_動態庫加入到配置檔案~/.bashrc

注意:ld_library_path告訴編譯器去哪個路徑下找動態庫

linux 靜態庫和動態庫生成

靜態庫 ar rcs lib a xx1.o xx2.o 生成靜態庫 c 建立乙個庫 s 建立目標檔案索引,在建立較大的庫時,能加快時間 rablib lib a 為庫檔案建立索引。ar t lib a 檢視庫檔案內所含目標檔案名字 ar tv lib a 檢視庫檔案內所含目標檔案,顯示檔名 時間 ...

Linux靜態庫和動態庫的生成

建立庫 靜態庫 在編譯時就拷貝到應用程式中,因此當多個應用程式同時引用乙個靜態庫時,記憶體中將會有呼叫函式的多個副本。優點 節省編譯時間。動態庫 在程式開始執行後呼叫庫函式時才被載入,被調函式的央存中只有乙個副本,並且動態庫可以在程式執行期間釋放動態庫所占用的記憶體,騰出空間供其他程式使用。建立靜態...

Linux生成動態庫 so與生成靜態庫 a

動態庫共享庫 第一步 通過gcc fpic c 編譯生成.o檔案 gcc fpic c a.c 編譯生成.o檔案 fpic與位置無關 gcc fpic c b.c 生成a.o,b.o編譯檔案。第二步 通過上面已經生成的a.o,b.o檔案生成.so檔案 方法1 gcc shared wl o liba...