Linux下靜態庫,動態庫的區別和聯絡(詳解)

2021-09-10 17:44:55 字數 864 閱讀 6010

我們是使用cmake和make工具構建工程時,經常會遇到鏈結庫的情況,其中的庫包括靜態庫和動態庫,很多讀者迷惑兩者的區別,本文對此進行解釋,如有不妥之處,敬請指正:

無論靜態庫,還是動態庫,都是由.o檔案建立的。因此,我們必須將源程式通過gcc先編譯成.o檔案;

1,**載入時間不同

2,編譯規則不同

動態類庫的名字一般是lib***.so,動態函式庫在編譯的時候 並沒有被編譯進目標**中,你的程式執行到相關函式時才呼叫該函式庫裡的相應函式,因此動態函式庫所產生的可執行檔案比較小;

動態庫編譯時:最主要的是gcc命令列的乙個選項, -shared 該選項指定生成動態連線庫, 例如:

g++ -shared -o libd1.so d1.o    /*根據中間目標檔案d1.o建立動態庫檔案d1.so*/

g++ -shared -o libd2.so d2.o    /*根據中間目標檔案d2.o建立動態庫檔案d2.so*/

類庫的名字一般是lib***.a;利用靜態函式庫編譯成的檔案比較大,因為整個 函式庫的所有資料都會被整合進目標**中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函式庫改變了,那麼你的程式必須重新編譯。

unix中,使用ar命令建立或者操作靜態庫

ar     archivefile objfile

archivefile:archivefile是靜態庫的名稱

objfile:objfile是已.o為副檔名的中間目標檔名,可以多個並列;

例如:g++ -o hello.o -c hello.cpp

ar cqs libhello.a hello.o

linux下靜態庫和動態庫的區別

一 引言 我們通常把一些公用函式製作成函式庫,供其它程式使用。函式庫分為靜態庫和動態庫兩種。通常情況下,對函式庫的鏈結是放在編譯時期 compile time 完成的。所有相關的物件檔案 object file 與牽涉到的函式庫 library 被鏈結合成乙個可執行檔案 executable fil...

Linux 下 C C 靜態庫 動態庫的區別

linux linux 下的庫必須以 lib開頭,用於系統識別 靜態庫 字尾 a 每次被呼叫都生成乙個副本 共享庫 動態庫 字尾.so 只有乙個副本 windows 靜態庫 字尾 lib 動態庫 字尾.dll 靜態庫的生成和使用 通常情況下,對函式庫的鏈結是放在編譯時期 compile time 完...

linux動態庫和靜態庫的區別

兩者區別 a,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知編譯器lib檔案裡面的具體內容 2 設定lib檔案允許編譯器去查詢已經編譯好的二進位制 b,動態庫的使用 程式執行時需要載入動態庫,對動態庫有依賴性,需要手動加入動態庫 c,依賴性 靜態鏈結表示靜態性,在編譯鏈結之後,lib庫中需要的資源...