在linux中,“.o”文件指的是目標文件,“.o”是Object的縮寫;linux中的“.o”文件相當于windows中的“.obj”文件,目標文件包含著機器代碼以及代碼在運行時使用的數據,如重定位信息,如用于鏈接或調試的程序符號表,此外還包括其他調試信息。
本教程操作環境:linux7.3系統、Dell G3電腦。
linux中o文件是什么
.o 就是object, 也就相當于windows下編譯的obj文件, 俗稱目標文件.
目標文件(objectfile)即存放目標代碼的計算機文件,它常被“稱作”二進制文件(binaries)。目標文件包含著機器代碼(可直接被計算機中央處理器執行)以及代碼在運行時使用的數據,如重定位信息,如用于鏈接或調試的程序符號表(變量和函數的名字),此外還包括其他調試信息。
Linux下有3種目標文件形式:
可執行目標文件,可重定位目標文件和共享目標文件。也有對應的稱為可執行文件,目標文件,共享庫,只是說法不同,指的都是同樣的東西。
可執行目標文件:包含二進制代碼和數據,可以在存儲器中直接執行。
可重定位目標文件:包含二進制代碼和數據,可以在編譯時與其他可重定位目標文件合并起來的,創建一個可執行目標文件。
共享目標文件:是一種特殊的可重定位目標文件,可以在加載或者運行時被動態加載到存儲器并鏈接。
事實上,編譯器和匯編器生成可重定位目標文件(包含共享目標文件)。鏈接器生成可執行目標文件。
Linux下目標文件文件格式:
由于編譯后的中間文件(Windows下的.obj和Linux下的.o),動態鏈接庫和靜態鏈接庫(Windows下的.lib.dll和Linux下的.a.so),跟可執行文件的內容和結構相似,所以一般跟可執行文件一起采用同一種文件格式存儲。
擴展知識:
生成.o文件:
gcc?-c?test.o?test.c
生成.a文件:
ar?cqs?test.a?test.o
.o 就相當于windows里的obj文件 ,一個.c或.cpp文件對應一個.o文件
.a 是好多個.o合在一起,用于靜態連接 ,即Static mode,多個.a可以鏈接生成一個exe的可執行文件
.so 是shared object,用于動態連接的,和windows的dll差不多,使用時才載入
推薦學習:Linux視頻教程