導航:首頁 > 源碼編譯 > c程序編譯obj是什麼文件

c程序編譯obj是什麼文件

發布時間:2022-11-03 09:50:35

A. c++ obj文件與exe文件的區別

編譯:當前源代碼編譯成二進制目標文件(.obj文件)

鏈接(link):將生成的.obj文件與庫文件.lib等文件鏈接,生成可執行文件(.exe文件)。

可以說.obj文件是.exe文件的前身;

1、obj里存的是編譯後的代碼跟數據,並且有名稱,所以在連接時會出現未解決的外部符號一說。當連成exe後便不存在名稱的概念了,只有地址。lib就是一堆obj的組合。

編譯器會默認鏈接一些常用的庫,其它的需要你自己指定。

2、目標文件,一般是程序編譯後的【二進制文件】,再通過鏈接器和資源文件鏈接就成可執行文件了。OBJ只給出了程序的【相對地址】,而可執行文件是【絕對地址】。CPP對應的二進制代碼格式obj,是未經重定位的!

3、編譯C 程序會產生obj 文件和exe 文件,我們都知道exe 文件是可執行文件,但obj 文件是做什麼用的呢?

查了下資料發現obj 文件和exe 文件都是二進制數據文件,其中obj 文件是COFF 格式,exe 文件時PE 格式。

那為什麼不直接讓 obj 文件作為可執行文件呢?

原來obj 文件的格式是跨平台 的,通過link 可以將obj 鏈接為所使用系統能夠識別的格式,比如windows 系統中的exe 文件。

一個現代編譯器的主要工作流程如下:
源程序(source code)→ 預處理器(preprocessor)→ 編譯器(compiler)→ 匯編程序(assembler)→ 目標程序(object code)→ 連接器(鏈接器,Linker)→ 可執行程序(executables)

(1)c程序編譯obj是什麼文件擴展閱讀

C++編譯 (.obj, .lib, .dll, .exe的關系)

一、總體介紹:

c++程序在編譯後,在目標路徑下會生成多個文件:

Debug文件夾(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg

*.exe:是生成的可執行文件

*.ilk:當選定漸增型編譯連接時,連接器自動生成ILK文件,記錄連接信息

*.obj:是目標文件,源程序編譯後的產物

*.pch:全稱是PreCompiled Header,就是預先編譯好的頭文件

*.idb:文件保存的信息,使編譯器在重新編譯的時候只重編譯最新改動過的函數和只對最新類定義改動過的源文件進行重編譯,以提高編譯速度

*.pdb:全稱是Program DataBase,即程序資料庫文件,用來記錄調試信息

*.dsp:(全稱是Developer Studio Project)也是一個配置文件

*.ncb:(全稱No Compile Browser)的縮寫,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC開發環境自動生成

*.plg:實際上是一個超文本文件,可以用Internet Explorer打開,記錄了Build的過程

*.cpp:就是C++源代碼文件.

二、具體介紹:

lib是和dll對應的。

lib是靜態的庫文件,dll是動態的庫文件。

所謂靜態就是link的時候把裡面需要的東西抽取出來安排到你的exe文件中,以後運行 你的exe的時候不再需要lib。

所謂動態就是exe運行的時候依賴於dll裡面提供的功能,沒有這個dll,你的exe無法運行。

lib, dll, exe都算是最終的目標文件,是最終產物。而c/c++屬於源代碼。源代碼和最終目標文件中過渡的就是中間代碼obj,實際上之所以需要中間代碼,是你不可能一次得到目標文件。

比如說一個exe需要很多的cpp文件生成。而編譯器一次只能編譯一個cpp文件。

這樣編譯器編譯好一個cpp以後會將其編譯成obj,當所有必須要的cpp都編譯成obj以後,再統一link成所需要exe,應該說缺少任意一個obj都會導致exe的鏈接失敗。

  1. obj里存的是編譯後的代碼跟數據,並且有名稱,所以在連接時會出現未解決的外部符號一說。當連成exe後便不存在名稱的概念了,只有地址。lib就是一堆obj的組合。

2.理論上可以,但實際中通常用lib。

3.編譯器會默認鏈接一些常用的庫,其它的需要你自己指定。

附上lib和DLL的區別

(1)lib是編譯時需要的,dll是運行時需要的。

如果要完成源代碼的編譯,有lib就夠了。

如果也使動態連接的程序運行起來,有dll就夠了。

在開發和調試階段,當然最好都有。

(2)一般的動態庫程序有lib文件和dll文件。

lib文件是必須在編譯期就連接到應用程序中的,而dll文件是運行期才會被調用的。如果有dll文件,那麼對應的lib文件一般是一些索引信息,具體的實現在dll文件中。

如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。

但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程序才行。

(3)在動態庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件。

引入庫文件包含被DLL導出的函數的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據並不復制到可執行文件中,因此在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址。

這樣當一個或多個應用程序運行是再把程序代碼和被調用的函數代碼鏈接起來,從而節省了內存資源。

從上面的說明可以看出,DLL和.LIB文件必須隨應用程序一起發行,否則應用程序將會產生錯誤。

B. *.c,*.obj,*.exe,分別是什麼程序

.c是程序代碼(也就是源文件)是保存你的C代碼的文件
.C文件逐個編譯後,每個生成對應的.OBJ文件
也就是目標文件,是對應C文件的二進制文件
連接之後,就成了.EXE文件,也就是可執行文件了
也就是你運行的程序

C. 編寫c程序後出現一個obj文件和exe文件,他們都是干什麼用的阿

.obj是將已將編好的程序編譯為匯編語言的文件。
.exe就是將所有的.obj文件連接起來得到的可執行文件!

D. C語言源程序文件名的後綴是.OBJ,經過編譯後,生成文件的後綴是什麼經過連接後,生成文件的後綴是什麼

C語言源程序文件名的後綴是.c。C源程序經過C編譯程序編譯之後生成一個後綴為.OBJ的二進制文件,

然後由稱為「連接程序」的軟體,把此.OBJ文件與C語言提供的各種庫函數連接起來生成一個後綴為.EXE的可執行文件。

由高級語言編寫的程序稱為「源程序」,把由二進制代碼表示的程序稱為「目標程序」。為了把源程序轉換成機器能接受的目標程序,這時我們需要具有翻譯功能的軟體--「編譯程序」。每種高級語言都有與它對應的編譯程序。

(4)c程序編譯obj是什麼文件擴展閱讀

1、目標文件的擴展名為「.obj」(Windows)或「.o」(Linux)。目標文件已經是機器指令,但還不能運行,因為目標文件還沒有解決函數調用問題。

2、可執行文件的擴展名為「.exe「。

E. C語言執行過程生成的三種文件和擴展名

  1. 用C語言編寫的程序成為C語言源程序,源程序文件的擴展名為「.c」。

  2. 源程序經編譯生成目標文件(".obj")。

  3. 把目標文件與各種庫函數連接起來,生成可執行文件(「.exe」).

C語言程序可以使用在任意架構的處理器上,只要那種架構的處理器具有對應的C語言編譯器和庫,然後將C源代碼編譯、連接成目標二進制文件之後即可運行。

(5)c程序編譯obj是什麼文件擴展閱讀:

C語言是面向過程的編程語言,用戶只需要關注所被解決問題的本身,而不需要花費過多的精力去了解相關硬體,且針對不同的硬體環境,在用C語言實現相同功能時的代碼基本一致,不需或僅需進行少量改動便可完成移植。

這就意味著,對於一台計算機編寫的C程序可以在另一台計算機上輕松地運行,從而極大的減少了程序移植的工作強度。

C語言既有高級語言的特點,又具有匯編語言的特點;既是一個成功的系統設計語言,又是一個實用的程序設計語言;既能用來編寫不依賴計算機硬體的應用程序,又能用來編寫各種系統程序;是一種受歡迎、應用廣泛的程序設計語言。

F. C語言中的obj

obj文件是目標文件,一般是程序編譯後的二進制文件,在通過鏈接器和資源文件鏈接就成exe文件了。
OBJ只給出了程序的相對地址,而EXE是絕對地址。
OBJ文件不支持有孔的多邊形面。
舉個例子說明一下:
選擇Maya的創建多邊形工具(Polygons -> Create Polyon Tool),在視圖中畫一個四邊形,不要按回車,按Ctrl在四邊形中間點一下,可以繼續在四邊形中挖一個洞。把這個有孔的多邊形存成OBJ格式,在導入Maya時,會發現多邊形少了一塊。如果你把這也看成錯誤,現在至少你已經知道錯誤的原因了,就是OBJ文件不支持有孔的多邊形面。
OBJ文件 -- 實際問題:
現在來討論一點比較實際的問題吧,就是一旦你遇到了一個出錯的OBJ文件,倒底該怎麼辦?
當你打開OBJ文件後,往往會看到有幾萬行的代碼,你恐怕還沒本事情一眼看出錯誤所在行,除非程序的錯誤信息中已經告訴你錯誤行。如果你不知道錯誤在哪裡,可以用排除法,弄清楚肯定正確的代碼范圍,通過縮減錯誤代碼范圍定位錯誤。例如,你先新建一個空的OBJ文件,把有錯的OBJ文件代碼粘貼一半過來,然後把這個只有一半代碼的新OBJ文件導入Maya。如果這時沒有錯誤信息,說明錯誤行是在另一半代碼中,可以從另一半代碼中再粘貼一部分代碼試試看;如果這時出現錯誤,說明錯誤行就在粘貼的代碼中,可以把粘貼過來的代碼刪去一部分再試試看。就這樣,逐步縮減范圍直到找到錯誤行為止。
這種方法雖然很麻煩,不過頗為有效。如果你不會編程,又遇到非常緊急的情況,這種方法還是值得一試的。
OBJ文件 -- 細節:
掌握了這么多差不多也夠用了,不過由於網上詳細講解OBJ文件的中文文檔很少,我還是再講一些例子,給大家提供多一點的信息吧。
簡單的OBJ格式寫法。
# Simple Wavefront file
v 0.0 0.0 0.0
v 0.0 1.0 0.0
v 1.0 0.0 0.0
f 1 2 3
面可以使用負值索引,有時用負值索引描述面更為簡便。
"f -4 -3 -2 -1"這句索引值"-3"表示從"f"這行往上數第3個頂點,就是"v -0.500000 0.000000 -0.800000",其它的索引值以此類推。 因此與這一行等效的正值索引寫法為:"f 1 2 3 4"
v -0.500000 0.000000 0.400000
v -0.500000 0.000000 -0.800000
v -0.500000 1.000000 -0.800000
v -0.500000 1.000000 0.400000
f -4 -3 -2 -1
OBJ文件不包含面的顏色定義信息,不過可以引用材質庫,材質庫信息儲存在一個後綴是".mtl"的獨立文件中。關鍵字"mtllib"即材質庫的意思。
材質庫中包含材質的漫射(diffuse),環境(ambient),光澤(specular)的RGB(紅綠藍)的定義值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特徵。
"usemtl"指定了材質之後,以後的面都是使用這一材質,直到遇到下一個"usemtl"來指定新的材質。

G. C語言源程序文件的後綴是什麼,經過編譯後生成文件的後綴是什麼經過連接後生成文件的後綴是什麼

C語言源文件後綴名是.c,編譯生成的文件後綴名是.obj,連接後可執行文件的後綴名是.exe。

源文件的後綴僅僅是為了表明該文件中保存的是某種語言的代碼(例如.c文件中保存的是C語言代碼),這樣程序員更加容易區分,編譯器也更加容易識別,它並不會導致該文件的內部格式發生改變。



(7)c程序編譯obj是什麼文件擴展閱讀

C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大。

依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。

C語言是普適性最強的一種計算機程序編輯語言,它不僅可以發揮出高級編程語言的功用,還具有匯編語言的優點。

H. c 語言編譯後產生的obj文件是做什麼的

簡單的說就是目標代碼.
obj文件是單獨的目標文件,它還不能單獨運行.需要把相關的obj文件連接到一起,才能產生可執行文件.

I. 計算機中OBJ是什麼意思

obj是目標文件的意思。目標文件用以存放目標代碼和由編譯器或匯編器生成的相關數據的計算機文件格式稱為目標文件格式。目標文件格式有許多不同的種類。最初每種類型計算機都擁有自身獨特的格式,但隨著Unix和其他可移植操作系統的問世。

操作步驟/方法
1 obj是目標文件的意思。
2 目標文件用以存放目標代碼和由編譯器或匯編器生成的相關數據的計算機文件格式稱為目標文件格式。
3 目標文件格式有許多不同的種類。最初每種類型計算機都擁有自身獨特的格式,但隨著Unix和其他可移植操作系統的問世,人們定義了例如COFF和ELF這些格式,並在不同的系統上使用它們。通常,鏈接器的輸入和輸出使用相同的文件格式,庫文件和可執行文件格式也是一樣使用相同的格式。
4 設計或選擇一種目標文件格式是計算系統整體設計的關鍵部分。它影響著鏈接器的性能並因此影響著程序員在開發時的總耗時;如果格式是用於可執行文件,那麼格式的設計還會影響程序的開始運行花費的時間,以及影響到系統對用戶請求的反應速度。大部分目標文件格式以區塊的方式來組織,每一區塊中都裝載著同種數據。在虛擬內存系統需要這些塊的時候,它可以通過將這些塊分頁後調入,無需進一步地處理就可使用。

J. c語言中的動態鏈接和靜態鏈接生成的obj文件是什麼意思

obj文件時目標文件,是源文件被編譯後生成的文件簡單地講動態鏈接就是運行時的鏈接,靜態鏈接就是編譯時的鏈接/

閱讀全文

與c程序編譯obj是什麼文件相關的資料

熱點內容
erp是什麼伺服器 瀏覽:184
python中tmp 瀏覽:21
說明wpf加密過程 瀏覽:142
java讀取list 瀏覽:702
iis7gzip壓縮 瀏覽:39
有什麼安卓機打吃雞好 瀏覽:597
三星u盤加密狗 瀏覽:473
php函數的返回值嗎 瀏覽:586
國企穩定程序員 瀏覽:328
編程貓如何使用教程視頻 瀏覽:218
安卓遠端網頁如何打日誌 瀏覽:218
壓縮flash大小 瀏覽:993
解壓的玩具教程可愛版 瀏覽:366
哪個求職app比較靠譜 瀏覽:888
java的讀法 瀏覽:61
nod32區域網伺服器地址 瀏覽:1003
數碼科技解壓 瀏覽:236
新網的雲伺服器管理界面復雜嗎 瀏覽:367
無人聲解壓強迫症視頻 瀏覽:573
計算機編譯運行 瀏覽:640