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