【本质】你知道C语言编译的过程吗?
1、前言
如果你使用的是集成開發(fā)環(huán)境,那么你點(diǎn)擊編譯按鈕就可生成可執(zhí)行文件,然后點(diǎn)擊運(yùn)行即可運(yùn)行。那么,你知道從源代碼到可執(zhí)行文件經(jīng)歷了哪些過程嗎。僅僅是編譯?
下面以windows環(huán)境下的test.c為例,test.c里的代碼為:
#include <stdio.h> int main(void) {printf("This is a test program!\n");return 0; }其經(jīng)歷如下過程:
如圖,編譯生成可執(zhí)行文件的過程實(shí)際包含四個(gè)過程:(1)預(yù)處理;(2)編譯;(3)匯編;(4)鏈接。
2、預(yù)處理(Preprpcessing)
使用預(yù)處理器把源文件test.c經(jīng)過預(yù)處理生成test.i文件,預(yù)處理用于將所有的#include頭文件以及宏定義替換成其真正的內(nèi)容。
預(yù)處理的命令為:
gcc -E test.c -o test.i上述命令中-E是讓編譯器在預(yù)處理之后就退出,不進(jìn)行后續(xù)編譯過程;-o是指定輸出文件名。
預(yù)處理之后得到的仍然是文本文件。test.i文件部分內(nèi)容截圖如下:
3、編譯(Compilation)
使用編譯器將預(yù)處理文件test.i編譯成匯編文件test.s。
編譯的命令為:
gcc -S test.i -o test.s上述命令中-S讓編譯器在編譯之后停止,不進(jìn)行后續(xù)過程;-o是指定輸出文件名。匯編文件test.s是文本文件,部分內(nèi)容截圖如下:
4、匯編(Assemble)
使用匯編器將匯編文件test.s轉(zhuǎn)換成目標(biāo)文件test.o。
匯編過程的命令為:
gcc -c test.s -o test.o上述命令中-c、-o讓匯編器把匯編文件test.s轉(zhuǎn)換成目標(biāo)文件test.o。目標(biāo)文件test.o是二進(jìn)制文件,部分內(nèi)容截圖如下:
5、鏈接(Linking)
鏈接過程使用鏈接器將該目標(biāo)文件與其他目標(biāo)文件、庫文件、啟動(dòng)文件等鏈接起來生成可執(zhí)行文件。
鏈接過程的命令為:
gcc test.o -o test.exe綜上,生成可執(zhí)行程序過程為:預(yù)處理、編譯、匯編、鏈接。各個(gè)命令如下圖所示:
-END-
往期好文合集
電路與愛情<<戳這里
是否要從單片機(jī)轉(zhuǎn)嵌入式Linux?<<戳這里
關(guān)于「無人駕駛」的學(xué)習(xí)路線...<<戳這里
??最 后??
?若覺得文章不錯(cuò),轉(zhuǎn)發(fā)分享,也是我們繼續(xù)更新的動(dòng)力。
5T資源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、單片機(jī)、等等!
在公眾號(hào)內(nèi)回復(fù)「更多資源」,即可免費(fèi)獲取,期待你的關(guān)注~
長按識(shí)別圖中二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的【本质】你知道C语言编译的过程吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5g专利权归谁
- 下一篇: 国产编程语言又造假,丢不起这人!