動態(Dynamic Linking)與靜態連結(Static Linking)

  • 靜態連結(Static Linking)會在開發階段將程式所需要的函數、資源等全部加入程式的執行檔,執行檔的體積因此變大,所以靜態連結的執行檔往往需要較大的記憶體空間,當所用的函式庫越多時,執行檔也就越龐大。
  • 動態連結(Dynamic Linking)的函式會在程式執行時才被載入,而不是直接編譯在執行檔中,這種作法讓系統更彈性的應用硬體資源,而且可以不公開程式碼的情況分享給別人使用。

由於靜態連結是把整個Library包進去執行檔,因此可以保證到不同機器環境下執行時,也不會因為少了這個函式庫導致無法執行檔案,但其缺點是檔案會比較大,動態連結是在程式開始執行時才載入的,所以執行檔較小,而且更新程式庫無需重新編譯其他程式,兩者各有優缺點,以實際需求來選擇編譯的方式,當檔案共用多個函式庫,可採用動態連結,反之就建議採用靜態連結。

我們可以由檔名末端來判斷是否使用動態連結,在微軟的作業系統上,假設看到.dll即為動態連結,在蘋果的作業系統上,動態連結為.dylib,靜態連結為.a。