天天看點

連結器連結類型(靜态/動态)

說明:為什麼要用連結器,不想把核心代碼給使用者,但是使用者卻能享有這個代碼功能,庫都是加密的

連結分為兩種:靜态連結、動态連結。

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

結果對比:

連結器連結類型(靜态/動态)

繼續閱讀