動態連結 & 靜態連結(區別及優缺點)

2020-10-20 12:00:32
  1. 靜態連結與動態連結的區別
    在C語言中,我們知道要生成可執行檔案,要經歷預編譯、編譯、組合、連結,在連結過程中,靜態連結和動態連結就出現了區別。靜態連結的過程就已經把要連結的內容已經連結到了生成的可執行檔案中,就算你在去把靜態庫刪除也不會影響可執行程式的執行;而動態連結這個過程卻沒有把內容連結進去,而是在執行的過程中,再去找要連結的內容,生成的可執行檔案中並沒有要連結的內容,所以當你刪除動態庫時,可執行程式就不能執行。動態連結生成的可執行檔案要比靜態連結生成的檔案要小一些。

  2. 動態庫與靜態庫的區別
    就不設定環境變數的情況下來說
    動態庫一般都會存在/usr/lib/ 目錄下;而靜態庫可以在任何目錄下,只要你第一次連結的時候,用絕對路徑去連結就行了,之後再刪除,是不會影響你的生成的執行檔案的。如若可以設定環境變數的話,動態庫和靜態庫可以放置到你想放的任何地方,只是動態庫需要設定環境變數,而靜態庫連結的時候需要絕對路徑,但一般來說,動態庫都會放在放在/usr/lib,應該大家都習慣了,這樣也方便尋找,而當連結動態庫的時候預設的路徑就是/usr/lib。

各自的優缺點:
1、靜態連結庫執行速度比動態連結庫快。(執行過程不需要找連結的內容)
2、動態連結庫更節省記憶體。(未寫入要連結的內容)