對編譯和鏈接的認識
㈠ 什麼叫編譯,什麼又叫鏈接
編譯就是將源程序翻譯為機器代碼,機器代碼一般以*.obj文件保存。
鏈接就是將上一步產生的obj文件與操作系統動態庫組合為可執行的exe文件。
㈡ 什麼是程序編輯,編譯,連接
編輯就是寫代碼,編寫程序。
編譯就是將高級語言轉換成機器能識別的語言。
鏈接就是找程序運行是依賴的庫文件等。
㈢ c語言裡面的編譯和鏈接是怎麼回事
C/C++語言的完整編譯過程是
一、預編譯
處理#define #if #include這類#開頭的語句,這些稱為預編譯指令。這個過程中會把.h文件和.c/.cpp文件組合成最終交給compile過程的原文件。這個原文件是不包含任何#開頭的語句的。所有#define定義的宏也會被替換。
二、編譯
把上面那個原文件編譯成.o或者VC里是.obj文件。這個文件保存了機器碼化的函數、函數的描述、全局變數的描述、乃至段的描述等等。
三、連接
把可執行程序需要的所有的編譯過程產生的.o或者.obj文件組合到一起。(這里也包括.lib文件,.lib文件件本質上就是打包的.obj文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
㈣ VC中編譯與連接有什麼區別
要連接要先編譯,如果沒編譯會連接時會自動編譯。舉個例子,如果你有兩個文件,對一個文件進行編譯只是講這個文件編譯成了目標文件.obj,但是另外一個文件沒有,需對另外一個文件進行編譯,可以觀察結果輸出框的顯示,這時連接便會將兩個文件連接在一起,才會將互相調用的函數等聯系起來,生成.exe。如果不編譯直接點連接,系統自動將兩個文件編譯,並連接,生成.exe文件。
假設兩個文件分別是a.cpp,b.cpp,a調用b的函數:
編譯a:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
然後編譯b:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
b.obj - 0 error(s), 0 warning(s)
然後連接:
--------------------Configuration: a - Win32 Debug--------------------
Linking...
a.exe - 0 error(s), 0 warning(s)
假如編譯一個後直接連接:
編譯a:無變化
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
a.obj - 0 error(s), 0 warning(s)
直接連接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
如果兩個都不編譯,直接點連接:
--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp
b.cpp
Linking...
a.exe - 0 error(s), 0 warning(s)
注意:假如文件沒有被修改的話,編譯一次後不會再進行編譯了,可以直接連接,如果這時不編譯,直接點連接,也只是連接,沒有編譯過程。
編譯.h文件會提示不能編譯,因為.h一般存放的是函數的聲明,類的定義等,系統不會編譯,但是可以在頭文件中點連接進行整個程序的編譯連接過程。
連接後就可以運行了,也可以在沒編譯、連接時點運行,系統會自動編譯、連接。
㈤ c語言中的編輯,編譯,連接,運行分別是什麼意思
編輯就是對代碼的編寫,按照c語言規則,編寫完成一定功能的代碼。
編譯就是對代碼進行編譯,讓代碼從高級語言編譯成可以讓電腦識別運算的機器碼。
連接就是對代碼各個函數等進行,連接
運行就是運行所編輯代碼組成的程序。
㈥ 簡述一下編譯器和鏈接器的作用
1、編譯器:
編譯器對源文件進行編譯,就是把源文件中的文本形式存在的源代碼翻譯成機器語言形式的目標文件的過程,在這個過程中,編譯器會進行一系列的語法檢查。如果編譯通過,就會把對應的CPP轉換成OBJ文件。
2、鏈接器:
當鏈接器進行鏈接的時候,首先決定各個目標文件在最終可執行文件里的位置。然後訪問所有目標文件的地址重定義表,對其中記錄的地址進行重定向(加上一個偏移量,即該編譯單元在可執行文件上的起始地址)。
然後遍歷所有目標文件的未解決符號表,並且在所有的導出符號表裡查找匹配的符號,並在未解決符號表中所記錄的位置上填寫實現地址。最後把所有的目標文件的內容寫在各自的位置上,再作一些另的工作,就生成一個可執行文件。
㈦ 用C語言編的程序,要生成可執行文件的時候,要編譯、鏈接,編譯是什麼意思啊鏈接是什麼意思編譯和鏈接
編譯就是把C代碼轉換成CPU可執行的機器指令,每個.c文件生成一個.obj文件。
鏈接就是把生成的(多個) .obj 文件及用到的庫文件(.lib)一起組合生成可執行文件(.exe)。
㈧ 怎麼理解C++編譯、連接、運行
編譯是將各個模塊轉化為機器語言的對象文件
連接就是把這些對象文件再組合,將模塊與模塊之間的入口與出口銜接起來
例如你自己寫個單文件程序,你自己的程序是一個模塊
然後你在頭文件裡面調用的東西又是幾個模塊
各個模塊之間被調用的函數稱為符號
編譯的時候引用其他模塊的地方用符號標注,但是不指向實際地址
連接的時候將模塊進行組合,求得各個符號的偏移地質,再按照符號列表填入各個模塊實現實際調用,這才是一個完整的程序
運行就不多說了,就是把程序調入機器完成特定邏輯的步驟
㈨ 如何理解程序的編譯,鏈接,載入等各個過程
編譯是將高級程序語言(c,c++,c#等)轉換成匯編語言,並且將變數翻譯成寄存器
鏈接是將多個編譯過的文件組合成一個文件,並且加入程序調用的庫函數等所需的其他資源
載入是將以上處理過的後生成的指令(二進制碼)在執行前載入到內存中,並提供地址翻譯。
㈩ 為什麼要對C源程序進行編譯、鏈接
首先要說的是C語言屬於高級語言,不能直接被計算機識別而執行,所以需要一些操作來轉化。。一開始是編譯預處理,對宏,包含指令,編譯指令等進行處理,然後是詞法語法分析,將源代碼翻譯成中間代碼(一般是匯編),接著優化代碼,,然後將中間代碼翻譯成機器語言(目標文件),機器語言是計算機的基層語言,能被計算機直接識別。。接著鏈接目標文件,生成可以執行文件。。。大概就是這樣。。詳細的LZ可看這個總結。。http://bbs.zdnet.com.cn/thread-1614727-1-1.html
