Ⅰ C語言編譯怎樣連接lib文件,請講解連接的原理,
廣義的代碼編譯過程,實際上應該細分為:預處理,編譯,匯編,鏈接。
預處理過程,負責頭文件展開,宏替換,條件編譯的選擇,刪除注釋等工作。gcc –E表示進行預處理。
編譯過程,負載將預處理生成的文件,經過詞法分析,語法分析,語義分析及優化後生成匯編文件。gcc –S表示進行編譯。
匯編,是將匯編代碼轉換為機器可執行指令的過程。通過使用gcc –C或者as命令完成。
鏈接,負載根據目標文件及所需的庫文件產生最終的可執行文件。鏈接主要解決了模塊間的相互引用的問題,分為地址和空間分配,符號解析和重定位幾個步驟。實
際上在編譯階段生成目標文件時,會暫時擱置那些外部引用,而這些外部引用就是在鏈接時進行確定的。鏈接器在鏈接時,會根據符號名稱去相應模塊中尋找對應符
號。待符號確定之後,鏈接器會重寫之前那些未確定的符號的地址,這個過程就是重定位。
Ⅱ C語言源程序文件經過編譯連接之後生成一個後綴為_____的文件。
如果只生成一個文件,那麼這個題目答案是B。編譯(compile)後生成目標文件,後綴:.obj。也就是機器碼。
然後鏈接器(Linker) 連接生成可執行文件,後綴:.exe。最後運行命令(go),直接運行.exe文件。
(2)編譯連接的過程擴展閱讀:
簡單講,編譯器就是將「一種語言(通常為高級語言)」翻譯為「另一種語言(通常為低級語言)」的程序。
一個現代編譯器的主要工作流程:源代碼(source code) →預處理器(preprocessor) →編譯器(compiler) →目標代碼(object code) →鏈接器(Linker) → 可執行程序(executables)
高級計算機語言便於人編寫,閱讀交流,維護。機器語言是計算機能直接解讀、運行的。
編譯器將匯編或高級計算機語言源程序(Source program)作為輸入,翻譯成目標語言(Target language)機器代碼的等價程序。
源代碼一般為高級語言 (High-level language), 如Pascal、C、C++、Java、漢語編程等或匯編語言。
而目標則是機器語言的目標代碼(Object code),有時也稱作機器代碼(Machine code)。
對於C#、VB等高級語言而言,此時編譯器完成的功能是把源碼(SourceCode)編譯成通用中間語言(MSIL/CIL)的位元組碼(ByteCode)。
最後運行的時候通過通用語言運行庫的轉換,編程最終可以被CPU直接計算的機器碼(NativeCode)。
Ⅲ C語言 四個過程:預處理,編譯,匯編,鏈接,分別進行了什麼過程別度娘。
1.預處理 這個階段用來處理所有的預處理指令 - 主要是一些宏替換,頭文件導入
2.編譯 對預處理後的代碼進行翻譯工作,得到計算機
所認識的格式編譯工作得到的結果文件叫做目標文件,
擴展名是.o(編譯得到匯編文件(.s) ->經過匯編後得到.o目標文件)
3.鏈接 把所有的目標文件和其他必要的文件合並在一起
得到最終的可執行文件
Ⅳ 程序編輯,程序編譯,程序連接
編輯,類似於文本編輯,將程序代碼輸入進去,可以修改,增加,刪除
編譯,將程序代碼按一定規則變換成機器可以識別的可執行代碼序列,
連接,將編譯的代碼序列與必須的啟動代碼,用到的庫文件按規則組合連接成可執行程序
Ⅳ 用MASM6.0編寫的匯編怎麼編譯連接運行
第一步:
把源程序放在masm6.0目錄下,假如寫好一個liti.asm源文件,就是說把liti.asm文件和masm6.0的masm.exe等文件放在同一個文件夾中。例如:如果你的masm.exe和link.exe等那些文件在e:\abc目錄下,那麼把源程序liti.asm文件也放鄭游在這個目錄中。
第二步:
開始——運行——輸入cmd打開命令行衡叢嫌窗口,通過dos指令(這個會嗎?)進入到abc目錄下。就是命令行中顯示 e:\abc>
然後在「>」後輸入masm liti.asm
整個命令行這樣顯示
e:\abc>masm liti.asm
然後一路回車按下去
這是編譯的過程,如果編譯通過,無錯誤,會生成liti.obj文件,
進入下一步鏈接
e:\abc>link liti.obj
然後就一路回車按下去
這是連接的過程,如果鏈接無錯,那麼就會生成liti.exe文件,就可以執行它了。
e:\abc>liti
然後按回車,咐手就能執行了
Ⅵ c語言裡面的編譯和鏈接是怎麼回事
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
Ⅶ C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(7)編譯連接的過程擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
Ⅷ 程序編譯連接的過程中各幹了什麼事情
呵呵,樓主應該看看《編譯原理》。
我的空間里的一篇日誌或許對樓主也有幫助。
鏈接是把程序代碼與所需要的其他目標代碼,或函數庫,Run-time 庫連接在一起。
比如 printf,程序代碼里沒有它內部實現的代碼,只是說要調用這個功能。
連接程序會把它內部實現代碼從 Run-time 庫里提出來,放在一起,這樣程序才可以單獨執行。
對於使用了第三方函數庫的代碼來說,鏈接程序同樣會在第三方函數庫中提取相關內容,加在一個可執行文件(Exe 或其他)中。
另外,一些比較大的程序,可能會分若干個文件,它們互相調用彼此的函數。可以獨立編譯成若干個目標代碼。如果這些函數有的缺失了,編譯也可以通過。
這樣做的好處是,對於大型程序,分成若幹部分分別編譯,加快了編譯過程。同時,減少每個源碼文件的行數。
比如,寫一個計算程序。後台計算有一個文件,可以編譯成功。前台界面有一個文件,也可以編譯成功。它們分辨編譯成兩個不同的目標代碼文件(obj 或其他)
然後經過鏈接過程
這個例子的話,可以認為有這個式子:
前台.obj + 後台.obj + .... + 第三方函數庫 + Run-time 庫 = Exe
鏈接的時候,才會檢查這種相互依賴是否完整。
比如前台部分是否使用了有些函數,而這些函數在後台處理模塊中並不存在?或者忘記寫這個函數了?
或者是否調用了一個後台函數,而這個函數的參數與調用的時候根本不一致?
發生這些情況時,才會給出鏈接警告和錯誤。
Ⅸ c語言中的編輯,編譯,連接,運行分別是什麼意思
1、編輯:編寫代碼,製作C語言的源文件。
2、編譯:是由編譯程序將C語言源文件轉換成二進制中間文件,對文件內部的語法語義做處理,如果編譯出錯,無法進行後續動作。
3、鏈接:將編譯中生成的中間文件組合成二進制可執知行文件,這一步會對文件之間的關聯做檢查,如果出錯,將不會生成可執行文件,也就無法執行。
4、執行:運行可執行文件,這一步道是編寫代碼的最終目的。
(9)編譯連接的過程擴展閱讀:
DOS命令通常分為三類:內部命令、外部命令和批處理命令。
1、內部命令:
其包含在命令解釋程序COMMAND.COM中,一旦啟動DOS,這些命令就被調入內存,只要在DOS系統提示符下輸入這些命令,就可立即執行。
2、外部命令:
其以文件的形式存儲在系統盤上,所帶擴展名為COM和EXE。DOS啟動時,它們並沒有被調入內存,執行前必須從系統盤讀進內存。因此輸入外部命令時,要了解該命令是否在當前盤上,不然DOS無法找到它們。
3、批處理命令:
實際上是個文件,該文件包含多條命令,當用戶鍵入批處理文件名時,DOS將順序執行其中的各條命令。注意,批處理命令必須用「.BAT」作為擴展名。
C語言的運算非常靈活,功能十分豐富,運算種類遠多於其它程序設計語言。在表達式方面較其它程序語言更為簡潔,如自加、自減、逗號運算和三目運算使表達式更為簡單。
當多種不同運算組成一個運算表達式,即一個運算式中出現多種運算符時,運算的優先順序和結合規則就會顯得十分重要。
網路-運行命令
網路-C語言