linux下的靜態庫和動態庫

2021-08-08 03:48:32 字數 1207 閱讀 4402

意義:為了避免**的重寫率,我們可以將已經寫好的**形成乙個庫,當我們再次用到的時候可以直接呼叫,而不是重新去寫,即「站在巨人的肩膀上」。

linux下有兩種庫:

一、靜態庫:

準備工作:

int swap(int *x,int *y)

#include int main()

1 將我們需要的函式生成乙個.o 檔案 

root# gcc -c swap.c  這時候當前目錄下會有乙個swap.o檔案

2 通過.o檔案形成靜態庫命

root#  ar  -rsv  libswap.a  swap.o

即:ar -rsv 靜態庫名稱 目標檔案1 目標檔案2(即可以吧多個.o檔案新增在乙個庫中)

靜態庫命名方式:以lib開頭+庫功能描述+.a

3 靜態庫在程式中的使用

直接使用靜態庫中的函式,但最好宣告函式

4 編譯程式

root#  gcc main.c  -l/root(靜態庫路徑)  -l swap(靜態庫名稱)  -o  exe

或root# gcc main.c libswap.c -o exe

二、動態庫(共享庫):

1 也是以.o檔案建立動態庫

2 命令:

root# gcc -shared  -fpci  -o  libswap.so swap.o

root#  gcc -shared  -fpci  -o  動態庫名稱 目標檔案1 目標檔案2

動態庫命名方式:以lib開頭+庫功能描述+.so

3 動態庫在執行程式時去到動態庫中呼叫函式,所以我們應將動態庫放到指定目錄中,

動態庫存放路徑必是系統庫存放路徑# mv libswap.so /usr/lib

4 編譯源程式 gcc main.c -l庫名稱 -o exe

root#  gcc main.c -l swap -o exe

需要注意的是:對於靜態庫和動態庫,其本質的區別在於:

靜態庫:庫中的**在編譯過程中就已經載入其中,因此主函式程式內容很大,浪費空間。

動態庫:庫中的**在編譯過程中只是做了一下引用,在程式執行時才載入記憶體的,因此其主函式內容很少。

另外,對於ar -rsv等用法可以查詢ar[-] 的用法,以及引數選項,這裡不多做解釋

linux 下靜態庫和動態庫

我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。靜態庫在程式編譯時會被連線到目標 中,程式執行時將不再需要該 靜態庫。動態庫在程式編譯時並不會被連線到目標 中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。本文主要通過舉例來說明在 linux中如何建立...

linux下的靜態庫和動態庫

庫是什麼?在我們實際程式設計中,經常會引入各種庫函式,那麼庫是什麼?從本質上來說是一種可執行 的二進位制格式,可以被載入記憶體中執行。庫分靜態庫和動態庫兩種。靜態庫 linux下靜態庫的名字一般是lib a,為庫的名字。利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都會被整合進目標 中,...

Linux下的靜態庫和動態庫

在我們平時寫 的時候,通常會引用一些庫檔案來幫助我們實現需要的功能,這些庫檔案是別人提前已經寫好的,我們只需要拿出庫檔案的介面來使用就可以了。這種庫檔案分為兩種,一種是靜態庫,一種是動態庫。靜態庫可以簡單的看成一組目標檔案集合,即很多目標檔案經過壓縮打包後形成乙個檔案。在靜態庫的載入過程中,第一步是...