一、二者區別
1、靜態庫是在程式執行前就加入到目標程式中去
動態庫程式執行的過程動態的由目標程式去呼叫
2、靜態庫對空間要求不高,對時間要求高
動態庫對時間要求不高,對空間要求高
二、庫製作
同一目錄下有三個檔案 主:hellomain.c 頭: hellomain.h功能: hellofunc.c
1、靜態庫的製作
靜態庫檔案格式:lib***x.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、動態庫的製作
動態庫檔案格式:lib***x.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就可以了
使用du 命令 可以檢視檔案的大小 此時就可以使用du 靜態庫生成的檔案和動態庫生成的檔案
靜態庫的檔案會大一些
Linux下製作動態庫與靜態庫
靜態函式庫 1.這類庫的名字一般是lib a 2.利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都會被整合進目標 中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進可執行檔案了。當然這也會成為他的缺點,因為如果靜態函式庫改變了,那麼你的程...
Linux下靜態庫與動態庫的製作
二者的不同點在於 被載入的時刻不同。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該靜態庫,因此體積較大 動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在,因此 體積較小。現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開...
Linux靜態庫與動態庫製作過程
檔案 tobigchar.c mian.c tobigchar.h char tos include include tobigchar.h int main ifndef h define h int tos endif 生成目標檔案 gcc c o tobigchar.o tobigchar.c...