動態鏈接庫.so和靜態鏈接庫.a的區別

靜態鏈接庫:

  •擴展名:.a
  •編譯行爲:在編譯的時候,將函數庫直接整合到執行程序中(所以利用靜態庫編譯生成的文檔會更大)
 •獨立執行的狀態:編譯成功的可執行文件可以獨立運行,不需要再向外部要求讀取函式庫的內容
 •更新:如果函式庫更新,需要將整個項目程序重新編譯
 •好處:方便程序移植

動態鏈接庫:

  •擴展名:.so
  •編譯行爲:在編譯的時候,程序裏面僅有指向動態庫所在的指標,其內容並沒有被整合到執行文件中。所以,在程序運行之初不需要加載所有代碼,只有在用到函式庫中的某個函數時,程序纔會去讀取動態庫的內容(所以利用動態庫編譯生成的文檔會小些)
 •獨立執行的狀態:編譯成功的可執行文件不能獨立執行,函式庫必須存在,而且庫所在的目錄也不能改變。(移動之後,必須重新編譯鏈接)
  •更新:如果函式庫更新,不需要重新編譯,因爲執行文件裏僅有庫的位置(前提是函式庫名稱、位置都沒變)
  •好處:
  1) 只保留接口,將動態庫和程序代碼獨立,提高代碼的可複用性,降低程序耦合度。
  2) 節約內存,減少頁面交換。
比如:計算機同時運行多個程序,都應用static.a,在內存中就會存在多份拷貝。一旦程序數量過多,就有可能內存不足。
動態鏈接庫.so和靜態鏈接庫.a的區別
而在動態庫在內存中只存在一份拷貝,不會浪費空間。
動態鏈接庫.so和靜態鏈接庫.a的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章