【Linux】靜態庫和動態庫的區別

  • 靜態庫在編譯的時候會被直接拷貝一份到目標程序裏,這段代碼在目標程序裏就不會再改變了。動態庫在編譯時並不會被拷貝到目標程序中,目標程序中只會存儲指向動態庫的引用。等到程序運行時,動態庫纔會被真正加載進來。且同一份庫可以被多個程序使用(動態庫也被稱作共享庫)。
  • 靜態庫沒有外部依賴,動態庫使得程序依賴於外部環境。
  • 動態庫運行時才載入的特性,可以隨時對庫進行替換,而不需要重新編譯代碼,動態載入會帶來一部分性能損失;靜態庫使用目標程序的體積增大。
    動態庫可以使用gcc選項裏面的 -fPIC進行編譯,以達到代碼共享的目的。
    -fPIC:表示編譯爲位置獨立的代碼,不用此選項的話編譯後的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章