編譯html
Compilewindows
與連接函數
Link ui
要鏈接要先編譯,若是沒編譯會鏈接時會自動編譯。舉個例子,若是你有兩個文件,對url
一個文件進行編譯只是講這個文件編譯成了目標文件spa
.obj翻譯
,可是另一個文件沒有,需對另htm
外一個文件進行編譯,能夠觀察結果輸出框的顯示,這時鏈接便會將兩個文件鏈接在一塊兒,blog
纔會將互相調用的函數等聯繫起來,生成內存
.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
通常存放的是函數的聲明,
類的定義等,
系統不會
編譯,可是能夠在頭文件中點鏈接進行整個程序的編譯鏈接過程。
鏈接後就能夠運行了,也能夠在沒編譯、鏈接時點運行,系統會自動編譯、鏈接。
在多道程序環境中,要想將一個用戶源程序變爲一個能夠在內存中執行的程序,一般要通過三步依爲 編譯,連接,裝入
首先是編譯,由編譯程序將用戶源代碼編譯成若干個目標模塊; 其次是連接,由連接程序將編譯後造成的一組目標模塊以及他們所需的庫函數連接在一塊兒,造成一個完整的裝入模塊,
由裝入程序將裝入模塊裝入內存
編譯與連接都是爲將用戶程序從硬盤上調入內存並將其轉換爲可執行程序服務的。 用編譯器時的compile 就是在進行編譯,link就是連接,運行程序時能夠看到的。 我對編譯的理解是高級語言翻譯爲電腦能夠理解的二進制代碼也就是機器語言。 連接下面舉例講。你最好邊看邊畫個內存的圖好理解。
如,咱們編寫了一個程序,編譯後,在做業地址空間中所獲得目標模塊的起始地址一般是0,假設在1000處寫了一句load 1,2500 (功能是將2500單元處的數據取至寄存器1)。在多道程序環境下將程序裝入內存時並不可能預先知道所編譯的模塊應該放在內存的何處,假設程序被裝入從10000開始的地址,此時2500變成了12500,這裏就出現了問題,須要修改指令中的相對地址,此時就須要連接來解決。這只是連接的一個功能。
連接分爲三種,靜態連接,裝入時動態連接,運行時動態連接。如今流行的是運行時動態連接,這種方法不只可加快程序的裝入過程,並且節省了大量的內存空間
程序入口main函數, .c文件, 預處理階段,(編譯後)目標文件,(鏈接後)可執行文件,
程序源文件(.c,.cpp,.m),目標文件(.obj, .o),可執行文件(.exe).
目標文件是二進制文件。
根據語言不一樣,可編譯源文件後綴可能不一樣,根據平臺不一樣,目標文件後綴不一樣,windows下是.obj。
參考:http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html
摘自:http://wenku.baidu.com/link?url=a4mVqQ4Iku8VsfVu-VUPoX9ksPEPB_dWUcAB82QxDCNzmlAPh14J6WSKK9wW9rlfKpmbseRvg4fpA2e2uiRQwo5pYehx7ZBk2nvKlqDxNre