說明:為什麼要用連結器,不想把核心代碼給使用者,但是使用者卻能享有這個代碼功能,庫都是加密的
連結分為兩種:靜态連結、動态連結。
1)靜态連結
靜态連結:由連結器在連結時将庫的内容加入到可執行程式中。
優點:
- 對運作環境的依賴性較小,具有較好的相容性
缺點:
- 生成的程式比較大,需要更多的系統資源,在裝入記憶體時會消耗更多的時間
- 庫函數有了更新,必須重新編譯應用程式
2)動态連結
動态連結:連接配接器在連結時僅僅建立與所需庫函數的之間的連結關系,在程式運作時才将所需資源調入可執行程式。
優點:
- 在需要的時候才會調入對應的資源函數
- 簡化程式的更新;有着較小的程式體積
- 實作程序之間的資源共享(避免重複拷貝)
缺點:
- 依賴動态庫,不能獨立運作
- 動态庫依賴版本問題嚴重
3)靜态、動态編譯對比
前面我們編寫的應用程式大量用到了标準庫函數,系統預設采用動态連結的方式進行編譯程式,若想采用靜态編譯,加入-static參數。
以下是分别采用動态編譯、靜态編譯時檔案對比:
測試程式(test.c)如下:
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
編譯:
[email protected]:~/test$ gcc test.c -o test_share
[email protected]:~/test$ gcc -static test.c -o test_static
結果對比: