Linux 靜態庫和動態庫

2021-10-03 09:42:47 字數 1006 閱讀 1946

庫:預先編譯(.o)好的方法的集合

linux下,庫分為靜態庫和共享庫。

庫的生成

靜態庫:庫名:lib***.a,lib是庫的字首,***是庫名,.a為靜態庫的字尾。

第一步:將需要生成靜態庫的.c檔案轉換為編譯後的.o檔案

命令:gcc -s mian.o mian.c

第二步:將編譯完成的.o檔案放到乙個集合中,生成靜態庫

命令:ar cr(v,可以沒有) lib***.a x.o xx.o ***.o

如何看到庫中的內容:為庫配置相應的.**件(宣告),或者在使用時將申明寫到需要的.c裡面。

共享庫:庫名:lib***.so,lib是庫的字首,***是庫名,.so為共享庫的字尾。

命令:gcc -shared -fpic -o lib***.so xx.c

-shared做共享庫的命令,-fpic是**位置無關命令。

庫的使用

靜態庫和共享庫的使用基本相同

命令gcc -o main main.c -l庫的路徑(當前路徑.) -lxx(庫名)

注意:共享庫要將其放在標準目錄下才能找到

庫一般放在/lib    /usr/lib下,標頭檔案在/usr/include下

預設只連線標準c庫

可執行/bin     /usr/bin

顯示可執行程式用到哪些庫  命令 ldd 可執行檔案

靜態庫和共享庫的區別

使用靜態庫里的方法,在編譯鏈結是直接將靜態庫包含到可執行程式中,執行時不需要用到庫,每次都存。鏈結後刪除庫仍可執行。

使用共享庫里的方法,在編譯鏈結時不包含到可執行程式中,只標記,執行時動態鏈結。有利於節省記憶體和磁碟空間。只存一次,有利於公升級庫。連線後刪除庫不可執行。

靜態庫只在鏈結時找一次。動態庫找兩次,鏈結時一次,執行時一次。

注意:ld_librart_path 是環境變數,執行時尋找共享庫得路徑。預設鏈結到/usr/lib

linux 靜態庫和動態庫

1.生成方式 靜態庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 然後生成靜態庫 ar rc libstatic.a test.o 共享庫 首先將原始檔編譯成目標檔案 gcc c test.c o test.o 生成共享庫 gcc fpic shared o libsha...

Linux 靜態庫和動態庫

庫有兩種,一種是靜態鏈結庫,一種是動態鏈結庫,不管是哪一種庫,要使用它們,都要在程式中包含相應的include標頭檔案。我們先來回顧一下程式編譯的過程。如下圖 庫 本質乙個目標檔案,這個檔案的字尾有兩種格式,對應兩種庫 缺點是 檔案太大。多次拷貝庫程式,不僅浪費空間,而且檔案體積大 下面實現乙個靜態...

Linux 靜態庫和動態庫

我們指定c程式從 到乙個可執行程式需要經過預處理 編譯 彙編 鏈結。而最後一步鏈結又分為動態鏈結與靜態鏈結。靜態鏈結相當於就是講所要鏈結的庫提前放入鏈結的檔案,這樣子的檔案體積較大,但是可移植性較高。而動態鏈結是在執行的時候才去主動鏈結所需要鏈結的庫,這樣的 體積較小,多個程式共同使用庫的 我們li...