Linux靜態庫與動態庫製作及使用

2020-08-11 18:27:18

一、二者區別
1、靜態庫是在程式執行前就加入到目標程式中去
動態庫程式執行的過程動態的由目標程式去呼叫
2、靜態庫對空間要求不高,對時間要求高
動態庫對時間要求不高,對空間要求高
二、庫製作
同一目錄下有三個檔案 主:helloMain.c 頭: helloMain.h功能: helloFunc.c
1、靜態庫的製作
靜態庫檔案格式:libxxxx.a
a、gcc helloFunc.c -c 生成helloFunc.o檔案
b、ar rcs libhellotest.a helloFunc.o 生成libhellotest.a 靜態庫檔案
2、靜態庫的使用
gcc helloMain.c -lhellotest -L ./ -o a.out
直接執行a.out就可以
-l: 是製作要用的靜態庫,庫名砍頭去尾
-L:是告訴gcc編譯器從-L指定的路徑中去找靜態庫,預設是從/usr/lib或/usr/local/lib去找
3、動態庫的製作
動態庫檔案格式:libxxxx.so
gcc -shared -fpic helloFunc.c -o libhellotest.so
-shared:是指定生成動態庫
-fpic:是一個標準,編譯階段生成位置無關碼
4、動態庫的使用
gcc helloMain.c -lhellotest -L ./ -o a.out
此時直接執行a.out會出錯,找不到庫。
第一種解決方法:將生成的libhellotest.so 拷貝到 /usr/lib資料夾下,拷貝時需要加上超級使用者許可權
第二種解決方法: export LD_LIBRARY_PATH = 「動態庫檔案路徑」,但此時配的環境變數是臨時的
可以使用shell指令碼解決這個問題,步驟如下
a、vi start.sh
b、在start.sh中新增export LD_LIBRARY_PATH = 「動態庫檔案路徑」,和./a.out然後儲存
c、chmod +x start.sh:給shell指令碼新增可執行許可權
d、./start.sh
通過以上解決方法,然後在執行a.out就可以了