靜態庫,動態庫

2022-04-11 09:38:03 字數 677 閱讀 9104

我想多說關於程式編譯的一些規範和方法,一般來說,無論是c、c++、還是pas,首先要把原始檔編譯成中間**檔案,在windows下也就是 .obj 檔案,unix下是 .o 檔案,即 object file,這個動作叫做編譯(compile)。然後再把大量的object file合成執行檔案,這個動作叫作鏈結(link)

一般來說,每個原始檔都應該對應於乙個中間目標檔案(o檔案或是obj檔案)。

鏈結時,主要是鏈結函式和全域性變數,所以,我們可以使用這些中間目標檔案(o檔案或是obj檔案)來鏈結我們的應用程式。鏈結器並不管函式所在的原始檔,只管函式的中間目標檔案(object file),在大多數時候,由於原始檔太多,編譯生成的中間目標檔案太多,而在鏈結時需要明顯地指出中間目標檔名,這對於編譯很不方便,所以,我們要給中間目標檔案打個包,在windows下這種包叫「庫檔案」(library file),也就是 .lib 檔案,在unix下,是archive file,也就是 .a 檔案。

庫檔案是已經編譯好的二進位制**。這個二進位制**可以是動態的,如 .so 也可以是靜態的,如 .a ,如果是動態的,則你最後生成的程式檔案在執行時,需要這個動態庫的支援,如果是靜態的,則你最後生成的客運行程式檔案執行時可以脫離這個庫檔案而獨立執行。

標頭檔案以.h結尾,可以用文字編輯器檢視內容。是ascii的。

而庫檔案以.a(靜態庫)或.so(動態庫)結尾,是二進位制的。

靜態庫動態庫

靜態庫動態庫 靜態庫 是在執行程式之前就已經加入到執行 中,成為執行程式的一部分來執行的,字尾名 a 動態庫 是在執行程式啟動時載入到執行 中,字尾名 so 靜態庫和動態庫區別 動態庫編譯速度慢,執行速度快,但是生成的程式體積較大,占用記憶體,然而動態庫較易公升級,就布局而言,動態庫 不易布局,執行...

靜態庫動態庫

我們使用ls l的時候看到的除了看到檔名,還看到檔案的元資料 擁有的許可權 硬鏈結數 檔案所有者 組 大小 檔案最後修改時間 檔名ls l讀取儲存在磁碟上的檔案資訊,然後顯示出來 其實這個資訊除了通過這種方式來讀取,還有乙個sata命令能夠看到更多的資訊 這裡寫描述 上面的執行結果有幾個資訊需要解釋...

靜態庫 動態庫

學習程式設計,要對編譯鏈結過程了然如胸。在鏈結階段,有兩種鏈結方式 靜態鏈結和動態鏈結。兩者最大的區別在於鏈結的時機不一樣,靜態鏈結是在形成可執行程式前,而動態鏈結的進行則是在程式執行時,下面來詳細介紹這兩種鏈結方式。一 靜態鏈結 然後使用ar工具生成a庫,指令如下 ar命令詳細介紹可以參考這篇部落...