Linux複習之靜態庫的建立

2021-10-07 15:50:30 字數 1114 閱讀 6474

庫是在鏈結階段和相應的.o檔案生成可執行檔案,根據鏈結方式的不同,可以分為靜態庫與動態庫。

當使用靜態庫時,聯結器會找出程式所需的函式,將它們複製到執行檔案中,因為是完整複製,所以一旦鏈結成功,可執行檔案在靜態庫不存在的情況下依然可以執行。

動態庫與靜態庫不同,動態庫會在程式內留下乙個 標記,當程式執行時,指明必須載入的庫檔案,所以當執行檔案時才動態載入庫檔案,使用動態庫必然會節約空間。

在linux下進行鏈結首先會鏈結動態庫,也就是如果不特別指定,會預設鏈結動態庫。

靜態庫的建立

1.先建立並編輯bank.h與sort.c檔案,bank.h內容如下:

程式sort.c提供了函式sortaz,功能是對程式進行排序:

2.將sort.c檔案生產可執行的sort.o檔案

指令:gcc -c sort.c

3.建立靜態庫並將目標檔案加入庫中

指令:ar -r 目標庫檔名稱 目標檔名稱

其中,ar是建立靜態庫的命令,選項-r是將目標檔案加入到靜態庫中,目標庫檔名有個不成文的規定,一般用lib開頭,以.a結尾,目標檔案列表中的目標檔案之間用空格隔開。

例如:ar -r libstring.a filel.o file2.o file3.o

ar指令的選項主要由一下幾種:

[r]:將目標檔案加入到靜態庫

[t]:顯示今天庫中的檔案

[a]:將目標檔案追加到靜態庫檔案現有檔案之後

[b]:將目標檔案追加到靜態庫檔案現有檔案之前

[d]:從指定的今天庫中刪除指定檔案

[x]:從指定的靜態庫中提取目標檔案

[p]:把靜態庫檔案中指定的檔案輸出到標準裝置

[q]:快速的追加檔案到靜態庫

Linux複習之靜態庫與動態庫的區別

靜態庫在程式編譯時會被鏈結到目標檔案中,程式執行時不需要該庫。缺點是編譯後檔案較大,但是隔離性好。動態庫在編譯時不會被鏈結到目標 中,在程式執行時才被載入,所以程式執行時需要動態庫存在。優點是編譯後檔案較小,多個應用程式可以使用同乙個動態庫,啟動多個程式時,只需要將動態庫載入到記憶體一次。通過之前的...

linux靜態庫的建立

ar crv libfoo.a bill.o fred.o bill.o 由gcc c bill.c 得到 fred.o 由gcc c fred.c得到 具體過程如下 bill.c 程式如下 include void bill char arg fred.c程式如下 include void fre...

Linux建立靜態庫

1 gcc c joker.c mac.c 建立.o檔案,已編譯,未鏈結的檔案。2 ar crv libfoo.a joker.o mac.o 對.o檔案歸檔,把一組小的檔案集中到乙個大檔案中,使用ar可以把任何型別的檔案歸為檔案。3 ranlib libfoo.a 為這個庫建立乙個內容表。可以這樣...