編譯後出現obj
A. c 語言編譯後產生的obj文件是做什麼的
obj文件是編輯好的文本文件進行成功編譯後生成的目標程序
B. c語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。是.obj還是.exe
看來出題人的眼光很窄,.obj、.exe是PC機的特色,一般教科書上說編譯後生成.obj,連接後為.exe。
C. 編程編譯時生成的obj文件和exe文件本質上有什麼區別
本質上都是2進制代碼,
但是
obj
沒有經過鏈接的重定位,不是可執行的代碼。
而且一個obj對應一個cpp編譯單元,裡面的外部符號都沒解析出來。
比如a.cpp
通過b.h使用了一個
b.cpp里定義的函數
func();
那麼a.cpp生成的obj裡面只會有func()
這個函數名的調用而已,也就是一個(對a.obj來說的)外部符號。
只有經過鏈接成為了.exe,
相應於a.obj裡面的func()的調用才會更新成實際的b.obj裡面的func()的實際地址。
對全局變數也是同樣的道理。
D. linux 中對C文件編輯後為什麼不產生OBJ文件,或產生的OBJ文件到哪裡了
如果你不指定編譯成什麼文件,gcc默認一步到位,直接生成可執行文件
你可以試試以下幾個參數
-c
只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件
例子用法:
gcc -c hello.c
他將生成.o的obj文件
-S
只激活預處理和編譯,就是指把文件編譯成為匯編代碼。
例子用法
gcc -S hello.c
他將生成.s的匯編代碼,你可以用文本編輯器察看
-E
只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件裡面.
例子用法:
gcc -E hello.c > pianoapan.txt
gcc -E hello.c | more
-o
制定目標名稱,預設的時候,gcc 編譯出來的文件是a.out,
例子用法
gcc -o hello.exe hello.c (哦,windows用習慣了)
gcc -o hello.asm -S hello.c
E. C語言編譯產生的.OBJ文件和匯編編譯產生的.OBJ文件,如何連接
一同學習。。。
Trubo C的命令行編譯連接
所謂命令行編譯,是指在dos下,調用Trubo C的tcc.exe程序.來完成對turbo C源程序的編譯連接工作.當選擇對後綴為*.asm的匯編程序文件編譯時,tcc還要調用TASM後才能對後綴為.asm的文件進行編譯,這種方式適合於c程序與匯編語言混合編程的編譯連接,當c程序嵌入匯編指令時,也必須用此方法編譯連接。
命令行編譯的格式為:
tcc [選項1 選項2 ...]文件名1 文件名2...其中選項是指對後面給出的文件進行連接時的選擇項,可選的常用選擇項如下所示:每個選項前都帶有"-"號,且大小寫是區分的。文件名是指源文件.c或目標文件.obj或庫文件.lib當不指定只編譯不連接時,tcc將完成編譯和連接兩個步驟,對.lib庫只進行形式上的連接,標准庫用戶不用進行連接。
例如:
tcc -ib:\include -lb:\lib -etest start.c body.obj myc當執行該命令時,表示將start.c源文件和body.obj目標文件及myc.c(命令行中該文件無後綴),分別進行編譯(對body.obj文件不再編譯),然後連接生成名為test的執行文件test.exe(由-test給出).
-ib:\include 表示包含文件的路徑是b:\include
-ib:\lib 表示庫文件的路徑是b:\lib
又例如:
tcc -ms -efile -lc:\tc\lib file1 file2.obj graphics.lib
其中-ms表示選擇小內存模式進行編譯,它也是turbo c的預設編譯模式,將file1進行編譯,然後和file2.obj 及graphics.lib進行連接.生成file.exe的可執行文件.其中graphcis.lib庫的路徑為c:\tc\lib,即意為在c:\tc\lib目錄下去尋找graphics.lib文件.當進行混合編程時,如果已有匯編程序s3.asm其命令行可寫為
tcc ic:\tc\include -lc:\tc\lib -mm s1 s2 s3.asm mylib.lib
表示用中模式(-mm)編譯源文件s1.c和s2.c,調用TASM對s3.asm進行編譯,然後連接生成可執行文件s1.exe,編譯時,到c:\tc\include目錄中去找包含文件,到
c:\tc\lib目錄中去找庫文件mylib.lib.
---------------------------------------
http://topic.csdn.net/t/20010308/22/81569.html
http://www.down22.org/plus/view.php?aid=15882
比VC難用。。。
F. 易語言中的link文件沒錯 但靜態編譯後 出現obj文件 怎麼辦
應該是許可權問題引起的,如果沒有沒有提示編譯失敗的話,直接刪除obj文件就行了
G. 編譯後得到一個.obj文件
編譯後得到obj很正常啊,make後就是obj,link後才會得到exe
H. 如何打開C語言編譯出的OBJ格式文件
OBJ 文件是二進制的文件,代碼已經是機器碼了,可用反匯編程序打開試試,不過看到的是匯編語言的程序若你會用debug,可以用它來試試
I. obj文件是怎麼產生的
程序編譯後的二進制文件,目標文件,編譯時就產生了。
J. VC++ 6.0 編c語言 編譯後出現yxy.obj - 1 error(s), 0 warning(s) 是怎麼回事啊
方法1:
啟動VC時不要用圖形界面,通過在命令提示符下輸入:Msdev /useenv運行(注意啦/前面有個空格).它會強制使系統環境變數全高設置成正確值.而且,只需要使用一次這樣的方式運行VC,以後再次通過雙擊圖標的方式啟動也不會有問題。
方法2:
使用你的VC安裝盤修復一下。
方法3:
在VC中點擊「Tools」—>「Option」—>「Directories」,發現路徑有誤,重新設置「Excutable Fils,Include Files,Library Files,Source Files」的路徑。
要是顯示「找不到mspdb60.dll」,去能正常運行VC++的電腦中搜索mspdb60.dll文件,拷貝到你的機器上Microsoft Visual Studio\Common\MSDev98\Bin下。缺失其他文件類似操作O(∩_∩)O。
方法4:
可能很多人在安裝VC 6.0後有過點擊「Compile」或者「Build」後被出現的
「Compiling... ,Error spawning cl.exe」錯誤提示給郁悶過。很多人的
選擇是重裝,實際上這個問題很多情況下是由於路徑設置的問題引起的,
「CL.exe」是VC使用真正的編譯器(編譯程序),其路徑在「VC根目錄\VC98\Bin」下面,
你可以到相應的路徑下找到這個應用程序。
因此問題可以按照以下方法解決:打開vc界面 點擊VC「TOOLS(工具)」—>「Option(選擇)」
—>「Directories(目錄)」重新設置「Excutable Fils、Include Files、
Library Files、Source Files」的路徑。很多情況可能就一個盤符的不同
(例如你的VC裝在C,但是這些路徑全部在D),改過來就OK了。
如果你是按照初始路徑安裝vc6.0的,路徑應為:
executatble files:
C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin
C:\Program Files\Microsoft Visual Studio\VC98\BIN
C:\Program Files\Microsoft Visual Studio\Common\TOOLS
C:\Program Files\Microsoft Visual Studio\Common\TOOLS\WINNT
include files:
C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
library files:
C:\Program Files\Microsoft Visual Studio\VC98\LIB
C:\Program Files\Microsoft Visual Studio\VC98\MFC\LIB
source files:
C:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC
C:\Program Files\Microsoft Visual Studio\VC98\MFC\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\ATL\INCLUDE
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC
如果你裝在其他盤里,則仿照其路徑變通就行(我就是裝在D盤)。
關鍵是microsoft visual studio\ 後面的東西要相同。
本人深受其害,重裝多次不管用,上面中文部分為高手借鑒,
下面路徑為本人深思所得,終於解決。與君分享。