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