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

2021-10-09 02:25:17 字數 1310 閱讀 4211

一、二者區別

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...