1. 靜态連結庫和動态連結庫
靜态連結庫就是一個多個彙編檔案(obj檔案)的集合,在Linux中通常命名為libxxx.a。對于靜态連結庫函數的連接配接是在編譯階段,直接将obj檔案的一份拷貝代碼連接配接到目标檔案。
動态連結庫也是一個或多個彙編檔案的集合,在Linux中通常命名為libxxx.so。對于動态連結庫函數的連結是在運作階段,各個目标程式之間共享同一份庫檔案。在編譯階段僅僅加載了函數符号。
優缺點:
1. 靜态庫的優點
在編譯階段就完成連接配接,不需要單獨庫檔案。(簡單、直接、粗暴)。
2. 靜态連結庫的缺點
1) 由于每個目标程式都需要拷貝一份連接配接代碼,是以會加重記憶體的負載。
2) 即使目标程式在運作過程中調用不到連結庫的函數(比如分支程式),靜态庫也需要加載。
3. 動态庫的優點:
1) 代碼共享,當多個程式運作同一個動态庫的時候,其實他們是共享的同一份代碼。減少了記憶體的使用量。
2)按需加載,隻有當運作過程中需要使用動态庫的函數,才會去加載動态庫。減少了不必要的記憶體消耗。
4. 動态庫的缺點:
1) 由于是在運作階段,才進行加載,所有會降低目标代碼的執行速度。
需要注意一點:
由于代碼共享,是以動态庫在編譯的時候,内部需要使用相對位址。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL4VFVOVTW65ENNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0cjM4QTOxEjM1ITMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2. 靜态庫的建立和使用
兩步走,step1 生成編譯後的檔案,利用ar指令進行打包
gcc -c test.c
ar cr ar cr libtest.a test1.o
3. 動态庫的建立
動态庫在建立的時候必須注意一點
gcc -fPIC -c test.c
gcc -shared libtest.so test.o
使用方法一
gcc -o main main.c 庫檔案全路徑
使用方法二
gcc -o main -Lpath -Ixxx -lxxx
-L:後面直接跟路徑名
-I:頭檔案的路徑
-l:xxx會尋找libxxx.so檔案