C语言-用gcc指令体验C语言编译过程
目錄
- 1 環(huán)境說明
- 2 gcc編譯步驟
- 2.1 編輯
- 2.2 預(yù)處理
- 2.3 編譯
- 2.4 匯編處理
- 2.5 鏈接
- 3 一步到位的方法
1 環(huán)境說明
- 系統(tǒng):Windows
- 編譯器:gcc
- 命令行工具:cmder (用系統(tǒng)自帶的命令行工具也可以)
2 gcc編譯步驟
| 1 | 編輯(Edit) | test.c | 進(jìn)行編碼工作 |
| 2 | 預(yù)處理(Pre-processing) | test.i | 將#include頭文件以及宏定義替換成其真正的內(nèi)容 |
| 3 | 編譯(Compiling) | test.s | 將經(jīng)過預(yù)處理之后的程序轉(zhuǎn)換成特定匯編代碼(assembly code)的過程 |
| 4 | 匯編處理(Assembling) | test.o | 將上一步的匯編代碼轉(zhuǎn)換成機(jī)器碼(machine code),生成目標(biāo)文件 |
| 5 | 鏈接(Linking) | test.exe | 將多個(gè)目標(biāo)文以及所需的庫(kù)文件鏈接成最終的可執(zhí)行文件(executable file) |
2.1 編輯
編寫以下代碼,命名文件名為test.c:
#include<stdio.h>int main() {printf("Hello World!");return 0; }2.2 預(yù)處理
預(yù)處理gcc指令如下:
gcc -E test.c -o test.i- 參數(shù)-E - 執(zhí)行編譯預(yù)處理
- 參數(shù)-o - 指明輸出文件的文件名
執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.i文件
可以發(fā)現(xiàn)生成的test.i文件會(huì)比test.c文件大得多,因?yàn)檫M(jìn)行了大量的替換,test.i文件可以通過記事本方式打開的,也可以輸入指令type test.i在控制臺(tái)查看,由于文件內(nèi)容很多,下面僅展示最后部分,可以發(fā)現(xiàn)末尾部分還是我們編寫的源代碼,而頭文件#include<stdio.h>進(jìn)行了全部替換
2.3 編譯
編譯gcc指令如下:
gcc -S test.i -o test.s- 參數(shù)-S - 編譯指令
- 參數(shù)-o - 指明輸出文件的文件名
執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.s文件
我們這里用指令type test.s在控制臺(tái)查看文件內(nèi)容,可以發(fā)現(xiàn)程序被轉(zhuǎn)換成了匯編代碼
2.4 匯編處理
匯編處理gcc指令如下:
gcc -c test.s -o test.o- 參數(shù)-c - 匯編轉(zhuǎn)機(jī)器碼
- 參數(shù)-o - 指明輸出文件的文件名
執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.o文件
由于文件已經(jīng)是機(jī)器碼了,打開文件的話顯然都是亂碼了,用指令type test.o在控制臺(tái)查看文件內(nèi)容如下:
2.5 鏈接
鏈接處理gcc指令如下:
gcc test.o -o test- 參數(shù)-o - 指明輸出文件的文件名
執(zhí)行過后控制臺(tái)沒有任何輸出,打開文件夾會(huì)發(fā)現(xiàn)生成了一個(gè)test.exe文件
既然已經(jīng)轉(zhuǎn)換成了.exe可執(zhí)行文件,在Windows操作系統(tǒng)下可以直接執(zhí)行,直接在控制臺(tái)輸入test,執(zhí)行結(jié)果如下:
可以發(fā)現(xiàn)最后輸出了Hello World!那么整個(gè)過程就結(jié)束了
3 一步到位的方法
直接可以從.c文件到.exe可執(zhí)行文件,這里就不演示了
gcc test.c -o test總結(jié)
以上是生活随笔為你收集整理的C语言-用gcc指令体验C语言编译过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言-宏定义#define的用法
- 下一篇: 操作系统原理第一章:操作系统概述