Linux 靜態庫與動態(共享)庫

2021-07-28 07:49:50 字數 804 閱讀 4506

不論是在linux還是windows下程式設計,我們都會用到庫,有自身帶的標準庫,也有我們自己寫的庫,庫就是預先編譯好的的方法的集合。

linux中的庫可以分為兩種,靜態庫動態庫,動態庫也稱為共享庫。在linux中,庫名稱都以lib開始,靜態庫名為:lib**.a,動態庫名為:lib**.so。

靜態庫和動態庫的區別:

靜態庫內容在被使用時,在編譯期間,用庫處則會被庫中內容替代,則在執行時,沒有了庫也是可以正常執行的;靜態庫的這種特性。也造成了它會使得編譯成的檔案很大。比如你有十處引用了庫函式,則這十處都會被庫函式的實現所替代,這就會使得最終生成的檔案變大很多。

動態庫在被使用時,它不會像靜態庫一樣直接被拷貝乙份,它是先標記著,在執行階段才會被載入,這個特性使得最終生成的檔案不會很大,但是在執行過程中,一定要使得所用到的庫一直存在。

靜態庫的製作:

ar  crv  lib**.a   **.o   **.o  …

動態庫的製作:

gcc  -shared  -fpic  lib**.so    

-shared:意思是產生共享庫,-fpic:在編譯階段時產生與位置無關的**

庫製作好後,就可以執行所包含這些庫的**了,在鏈結階段,要注意,應用-l指明庫的所在路徑,-l指明所用庫的名字(名字中不應 包括lib和字尾),當同時有相同名稱的動態庫和靜態庫時就無法區分了。

如果將庫放在標準庫的路徑下,則可省略-l指明路徑,因為編譯器預設搜尋存放標準庫的路徑,也就是/lib或/usr/lib。

Linux靜態庫與動態庫

靜態庫 a 靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。編譯程式時候需要庫作依賴,執行時候不需要。方便,不再需要外部函式庫支援 缺點 1 因為靜態庫被鏈結後直接嵌入可執行程式中,相當於每乙個可執行程式裡都有乙個庫的副本,浪費空間 2 一旦庫中有bug,需要重新編譯。建立步驟 1 編寫函...

linux動態庫與靜態庫

現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始。盡量不重複做別人已經做過的事,站在巨人的肩膀上 做事情。根據鏈結時期的不同,庫又有 靜態庫和共享庫 動態庫 二者的不同點在於 被載入的時刻不同,靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。共享庫的 是在可執行程式執行時...

靜態庫,共享庫,動態載入庫

一 靜態庫 1.概念 靜態庫就是一些目標檔案的集合,以.a結尾。靜態庫在程式鏈結的時候使用,鏈結器會將程式中使用 到函式的 從庫檔案中拷貝到應用程式中。一旦鏈結完成,在執行程式的時候就不需要靜態庫了。由於每個使用靜態庫的應用程式都需要拷貝所用函式的 所以靜態鏈結的檔案會比較大。2.建立與應用 首先建...