① 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文件集合)。另外連接過程還會組合一些其他數據,比如資源、可執行文件頭等等。
② 編寫代碼時,源代碼必須經過編譯和鏈接生成目標代碼,請問什麼是鏈接
鏈接是將編譯生成的目標代碼鏈接成可執行代碼,鏈接時會將需要調用的庫函數和目標文件一起鏈接成可執行代碼
③ C語言編輯編譯連接的作用是什麼
1
編輯:
就是寫代碼或修改代碼,製作C語言的源文件和頭文件。
2
編譯:是由編譯程序將C語言源文件轉換成二進制中間文件,在這一步中,會對文件內部的語法語義做處理,如果編譯出錯,無法進行後續動作。
3
鏈接:將2中生成的中間文件組合成二進制可執行文件,這一步會對文件之間的關聯做檢查,如果出錯,將不會生成可執行文件,也就無法執行。
4
執行:
運行可執行文件,這一步是編寫代碼的最終目的。
以上四步每步均依賴於上一步,這是一個逐步由高級語言(C語言)到機器語言(可執行文件)轉化的過程。廣義的編譯,包含編譯鏈接兩個部分。
④ c語言中的連接是什麼意思
c語言中的連接指de是將obj文件生成為exe文件。
##可以作為連接字元串的連接符,##為宏擴展提供了一種連接實際變元的。如果替換文本中的參數用##相連,那麼參數就被實際變元替換,##與前後的空白符被刪除,並對替換後的結果重新掃描。
例如,下面定義的宏paste用於連接兩個變元:
#definepaste(front,back)front##back
從而宏調用paste(name,1)的結果是建立單詞name1。
(4)編譯里的鏈接是什麼意思擴展閱讀
C語言連接符的使用:
#include<stdio.h>
#defineOperations(x)operation_##x//##是黏貼字元串
intOperations(sum)(intx,inty){//operation_sum(intx,inty)
returnx+y;
}
intOperations(sub)(intx,inty){//operation_sub(intx,inty)
returnx-y;
}
intOperations(mul)(intx,inty){//operation_mul(intx,inty)
returnx*y;
}
floatOperations(div)(floatx,floaty){//operation_div(intx,inty)
floatresult;
result=x/y;
returnresult;
}
#definePrint(x)printf("%s,%d ",#x,x);//#表示將參數轉變為字元串
intmain()
{
intx;
floaty;
x=Operations(sum)(10,20);
printf("x=%d ",x);
x=operation_sum(100,20);
printf("x=%d ",x);
x=Operations(sub)(10,20);//operation_sub(10,20)也可以
printf("x=%d ",x);
x=Operations(mul)(10,20);//operation_mul(10,20)也可以
printf("x=%d ",x);
y=Operations(div)(11,20);//operation_div(11,20)也可以
printf("y=%lf ",y);
Print(100);
return0;
}
⑤ 用C語言編的程序,要生成可執行文件的時候,要編譯、鏈接,編譯是什麼意思啊鏈接是什麼意思編譯和鏈接
編譯就是把C代碼轉換成CPU可執行的機器指令,每個.c文件生成一個.obj文件。
鏈接就是把生成的(多個)
.obj
文件及用到的庫文件(.lib)一起組合生成可執行文件(.exe)。
⑥ C語言編輯編譯連接的作用是什麼
C語言編輯的作用是檢查語法,製作C語言的源文件和頭文件,生成匯編代碼。
C語言編輯的作用是將匯編代碼轉換機器碼。在這一步中,會對文件內部的語法語義做處理,如果編譯出錯,無法進行後續動作。
C語言鏈接的作用是將機器碼鏈接到一起生成可執行程序。這一步會對文件之間的關聯做檢查,如果出錯,將不會生成可執行程序,也就無法執行。
(6)編譯里的鏈接是什麼意思擴展閱讀:
C語言鏈接時,將源文件中用到的庫函數與匯編生成的目標文件.o合並生成可執行文件。該可執行文件會變大很多,一般是調用自己電腦上的靜態庫。
靜態庫和應用程序編譯在一起,在任何情況下都能運行,而動態庫是動態鏈接,文件生效時才會調用。很多代碼編譯通過,鏈接失敗就極有可能在靜態庫和動態庫這出現了紕漏,要視情況解決。缺少相關所需文件,就會鏈接報錯。這個時候就要檢查下本地的鏈接庫是不是缺損。
⑦ 編譯之後為什麼要連接
這是一個編程基礎的問題。
目前編程語言主要有兩種類型,一種是編譯型語言,一種是解釋型語言。二者的區別在於:編譯型語言需要編譯、鏈接生成可執行文件之後才能運行,解釋型語言直接就可以運行。C語言是一種編譯型語言。
對於計算機來說,只能運行二進制的機器指令。為了方便編寫指令給計算機,通過簡單的替換之後有了匯編語言。但是匯編語言相對來說還是相當復雜,編寫軟體時工作量巨大。所以就有了如C語言,C++,JAVA之類的高級語言。
這些語言其實是對匯編做了抽象封裝。編譯這個動作就是將C語言翻譯成了匯編。C語言經過編譯這個動作後每個.C文件都會生成一個OBJ,鏈接這個動作是將多個OBJ鏈接到同一個可執行文件中,最後生成的是EXE文件。