在linux中,「.o」文件指的是目標文件,也就是存放目標碼的電腦文件;目標文件包含機器碼(可直接由電腦中央處理器執行)以及程式碼在執行時使用的數據,此外還包括其他調試資訊。 「.a」文件指的是靜態庫文件,是指要呼叫的函數或程序連結到可執行檔中,成為可執行檔的一部分,動態連結所呼叫的函數程式碼並沒有被拷貝到應用程式的可執行檔中去,而是在其中加入了所調用函數的描述資訊。
本教學操作環境:linux7.3系統、Dell G3電腦。
o就是object,也就是相當於windows下編譯的obj文件,俗稱目標文件
a就是archive,也就相當於window的VC下編譯的lib文件,俗稱靜態函式庫文件;多個.a可以連結產生一個exe的可執行檔。
.o文件是連結文件,.a靜態庫文件,靠.o文件生成,作為一個庫外部程式提供函數,介面。生成.o檔。
linux中的o文件(目標檔案)
#目標文件(objectfile)即存放目標程式碼的電腦文件,它常被“稱作”二進位(binaries)。目標檔案包含著機器碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用於鏈接或調試的程序符號表(變量和函數的名字),此外還包括其他調試資訊。
Linux下方有3種目標文件形式:
可執行目標文件,可重定位目標文件和共用目標文件。也有對應的稱為可執行文件,目標文件,共享庫,只是說法不同,指的都是同樣的東西。
可執行目標檔案:包含二進位程式碼和數據,可以在記憶體中直接執行。
可重定位目標檔案:包含二進位程式碼和數據,可以在編譯時與其他可重定位目標檔案合併起來的,建立一個可執行目標檔案。
共用目標文件:是一種特殊的可重定位目標文件,可以在載入或執行時被動態載入到記憶體並連結。
事實上,編譯器和組譯器產生可重定位目標檔(包含共用目標檔)。連結器產生可執行目標檔。
Linux下目標檔案檔案格式:
由於編譯後的中間檔案(Windows下的.obj和Linux下的.o),動態連結函式庫與靜態連結庫(Windows下的.lib.dll和Linux下的.a.so),跟可執行檔的內容和結構相似,所以一般跟可執行檔一起採用同一種文件格式儲存。
linux中的a文件(靜態庫文件)
#.a文件,是LINUX系統中的靜態連結庫檔案。
所謂靜態連結是指把要呼叫的函數或程序連結到可執行檔中,成為執行檔的一部分。當多個程式都呼叫相同函數時,記憶體中就會存在這個函數的多個拷貝,這樣就浪費了寶貴的記憶體資源。 .so檔案是共享庫檔案(動態連結)。動態連結所呼叫的函數程式碼並沒有被拷貝到應用程式的可執行檔中去,而是僅僅在其中加入了所呼叫函數的描述資訊(往往是一些重定位資訊),僅當應用程式被裝入記憶體開始運作時,在作業系統的管理下,才在應用程式與對應的.so之間建立連結關係。
.a檔案是多個.o檔案的組合。 .o檔案就是物件文件,裡麵包含的內容就是01這樣的機器可執行的指令,當程式要執行時還需要進行連結(link).連結就是把多個.o檔案鍊成一個執行檔。
相關推薦:《Linux影片教學》
以上是linux o和a什麼文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!