obj文件編譯
c語言編譯生成的.obj文件是一種文本文件,程序編譯時生成的中間代碼文件目標文件,一般是程序編譯後的二進制文件,再通過鏈接器和資源文件鏈接就成可執行文件了。OBJ只給出了程序的相對地址,而可執行文件是絕對地址。
obj文件基本結構:OBJ文件不需要任何種文件頭(File Header),盡管經常使用幾行文件信息的注釋作為文件的開頭。
OBJ文件由一行行文本組成,注釋行以符號「#」為開頭,空格和空行可以隨意加到文件中以增加文件的可讀性。有字的行都由一兩個標記字母也就是關鍵字(Keyword)開頭,關鍵字可以說明這一行是什麼樣的數據。
(1)obj文件編譯擴展閱讀:
C編譯的整個過程很復雜,大致可以分為以下階段:
1、預處理階段
在該階段主要完成對源代碼的預處理工作,主要包括對宏定義指令,頭文件包含指令,預定義指令和特殊字元的處理,如對宏定義的替換以及文件頭中所包含的文件中預定義代碼的替換等,總之這步主要完成一些替換工作,輸出是同源文件含義相同但內容不同的文件。
2、編譯、優化階段
編譯就是將第一階段處理得到的文件通過詞法語法分析等轉換為匯編語言。優化包括對中間代碼的優化,如刪除公共表達式,循環優化等;和對目標代碼的生成進行的優化,如如何充分利用機器的寄存器存放有關變數的值,以減少內存訪問次數。
3、匯編階段
將匯編語言翻譯成機器指令。
B. Makefile 怎麼把obj文件編譯到某個目錄
目錄結構
Project
- bin
- src [Makefile在這里]
- obj
想要把編譯的目標文件放到obj目錄派指,
因為cl不能指定目標文件輸出路徑,
所以目前採取了一種很蛋疼的方式:
代碼:
bin = "../bin/program.exe"
obj = "../obj"
link_cmd = "TODO:先留著吧"
linkcmd_vc = "TODO:也留著吧"
objects = $(obj)/main.obj
$(bin) : $(objects)
$(CC) -o $(bin) $(objects)
$(obj)/main.obj : main.c
cd ../obj
$(CC) -c ../src/main.c
就是對於每個文件每次手動改變一下工作目錄。
於是為了解決這個問題,擴展的想法是這樣:
1. 找到一個Makefile每次塵毀配make都首先執行的部余山分(就像c中的main.c)
2. 在上述部分中,改變當前工作路徑。
C. C語言源程序文件名的後綴是.OBJ,經過編譯後,生成文件的後綴是什麼經過連接後,生成文件的後綴是什麼
C語言源程序文件名的後綴是.c。C源程序經過C編譯程序編譯之後生成一個後綴為.OBJ的二進制文件,
然後由稱為「連接程序」的軟體,把此.OBJ文件與C語言提供的各種庫函數連接起來生成一個後綴為.EXE的可執行文件。
由高級語言編寫的程序稱為「源程序」,把由二進制代碼表示的程序稱為「目標程序」。為了把源程序轉換成機器能接受的目標程序,這時我們需要具有翻譯功能的軟體--「編譯程序」。每種高級語言都有與它對應的編譯程序。
(3)obj文件編譯擴展閱讀
1、目標文件的擴展名為「.obj」(Windows)或「.o」(Linux)。目標文件已經是機器指令,但還不能運行,因為目標文件還沒有解決函數調用問題。
2、可執行文件的擴展名為「.exe「。
D. c 語言編譯後產生的obj文件是做什麼的
obj文件是編輯好的文本文件進行成功編譯後生成的目標程序