linux靜態庫和動態庫

2021-08-22 11:42:09 字數 972 閱讀 4137

我們通常把一些公用函式製作成函式庫,供其它程式使用。

函式庫分為靜態庫和動態庫兩種。

靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。

動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。

靜態庫 是在可執行程式執行之前就已經加入到執行**中,成為執行程式的一部分;靜態庫的字尾一般是.a作為字尾。

程式所要用到的庫函式**在鏈結時全部 被copy到程式中。

導致的問題:如果有多個程序在記憶體中同時執行,並且使用了相同的庫函式,

那麼就會有多份拷貝,這就是對空間的浪費

1. gcc –c mylib.c –o mylib.o

2. ar cqs libmylib.a mylib.o    (靜態庫檔名的命名規範是以lib為字首,緊接著跟靜態庫名,擴充套件名為.a)

3. 將製作好的libmylib.a 複製到/usr/lib

則需要使用-l選項來顯示地指明需要鏈結。

動態庫檔名命名規範和靜態庫檔名命名規範類似,也是在動態庫名增加字首lib,但其擴充套件名為.so

製作 動態庫

1. gcc –c mylib.c –o mylib.o

2. gcc -shared -fpic mylib.o -o libmylib.so

3. 將製作好的libmylib.so 複製到/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...