編譯和鏈接
A. 多個源文件的編譯和鏈接
這個問題我也曾經遇到過,後來過了好久才弄懂。這個一般是把程序分在.h文件和.c文件,在.h文件中給出函數聲明定義基本的數據結構,在.c文件中實現相應的.h文件中的函數。然後要使用相應的介面或函數就包含.h文件,就是#include 相應的.h 文件。在編譯生成的時候編譯器會根據項目的makefile 來編譯生成。如果想比較清楚的了解,可以看看linux 下的make工具和makefile ,make 就是根據makefile 來編譯生成項目。vc++6.0底層的過程也類似,但是被界面屏蔽了。
B. 簡述一下編譯器和鏈接器的作用
1、編譯器:
編譯器對源文件進行編譯,就是把源文件中的文本形式存在的源代碼翻譯成機器語言形式的目標文件的過程,在這個過程中,編譯器會進行一系列的語法檢查。如果編譯通過,就會把對應的CPP轉換成OBJ文件。
2、鏈接器:
當鏈接器進行鏈接的時候,首先決定各個目標文件在最終可執行文件里的位置。然後訪問所有目標文件的地址重定義表,對其中記錄的地址進行重定向(加上一個偏移量,即該編譯單元在可執行文件上的起始地址)。
然後遍歷所有目標文件的未解決符號表,並且在所有的導出符號表裡查找匹配的符號,並在未解決符號表中所記錄的位置上填寫實現地址。最後把所有的目標文件的內容寫在各自的位置上,再作一些另的工作,就生成一個可執行文件。
C. 編譯和鏈接的區別是什麼
編譯 源文件 -> 機器碼
鏈接 機器碼 -> 可執行文件
在GNU/Linux系統下:
編譯: .c -> .o
鏈接: .o .o .o -> a.out
具體的可以看gcc的相關文檔。
這個可以參考:
http://www.network-theory.co.uk/docs/gccintro/gccintro_82.html
D. c語言為何需要編譯和連接才能運行
的文件(也稱為源代碼)而已,需要經過1定的處理才能轉換成機器上可運行的可履行文件。
我們將對C語言的這類處理進程稱為編譯與鏈接。
E. 用C語言編的程序,要生成可執行文件的時候,要編譯、鏈接,編譯是什麼意思啊鏈接是什麼意思編譯和鏈接
編譯就是把C代碼轉換成CPU可執行的機器指令,每個.c文件生成一個.obj文件。
鏈接就是把生成的(多個) .obj 文件及用到的庫文件(.lib)一起組合生成可執行文件(.exe)。
F. c++ 編譯 鏈接是怎麼回事
compile和link是大多數語言從原代碼生成可執行程序的兩個步驟。
之所有有這兩個步驟因為幾乎任何一個程序都不是用一個原文件寫出來的。compile是先針對單獨原文件進行處理。link是把compile處理的結果組合成一個完整的可執行文件。
其實C/C++完全也可以一步成型,不需要compile和link兩個步驟,但是那樣的後果就是:一,每次生成可執行程序,必須翻譯全部源代碼;二,C語言的執行庫(printf, scanf這些)必須都以源代碼形式存在。這怎麼樣也說不過去吧。
另外頭文件不屬於compile和link過程,頭文件是預編譯過程的文件。
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
G. 計算機組成編譯和鏈接的作用
操作系統原理就是講操作系統的,比如怎麼管理內存,怎麼管理文件,怎麼管理進程。
計算機組成原理講的是計算機硬體各部分的組成與協作,比如怎麼取址,內存怎麼構成,磁碟的磁臂磁軌之類的。
編譯原理,講的是怎麼將高級語言(比如c,java)翻譯成機器語言的過程與技術。
H. c語言裡面的編譯和鏈接是怎麼回事
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
I. 如何使用.mak文件進行編譯和鏈接
C語言是一門計算機語言,有自己一定的語法。但是,C語言並不能直接被對象所理解,需要將C語言轉變成可執行代碼,即二進制代碼。在C語言轉變成二進制可執行代碼時,是以工程為單位的。而一個工程中往往會包含多個C文件。因此,需要將每個C文件都編譯成二進制代碼。此時,每個C文件所對應的二進制代碼是獨立的。由於工程是一個系統,所以需要將所有的C文件二進制代碼鏈接到一起,形成一個工程的可執行文件。
綜上,編譯和鏈接就是指的將C文件轉變成二進制代碼,並將各個獨立的C文件二進制代碼鏈接到一起,形成一個可執行文件的過程。