【C++】C/C++代碼生成C/C++可執行程序

1、首先,GCC與G++分別是GNU 的C、C++編譯器, GCC與G++在執行編譯工作的時候,總共需要4步:

  • 1、預處理,生成 .i 的文件[預處理器cpp]
  • 2、將預處理後的文件轉換成彙編語言,生成文件 .s [編譯器egcs]
  • 3、有彙編變爲目標代碼(機器代碼)生成 .o 的文件[彙編器as]
  • 4、連接目標代碼,生成可執行程序 [鏈接器ld]

這裏以一個能在編譯器下運行的C代碼“main.c”爲例,使用GCC編譯對應的可執行程序。

1、預編譯(Preprocessing)命令:會對各種預處理指令(#include、#define、#ifdef 等#開始的代碼行)進行處理,刪除註釋和多餘的空白字符,生成一份新的代碼。

-o 參數:是對命令輸出結果進行導入操作,這裏是把 gcc -E main.c 操作結果輸出到文件main.i中進行保存。預編譯main.c,預編譯之後得到的文件的名字叫main.i。

gcc -o main.i main.c -E  // 生成main.i

2、編譯(Compilation)命令:對代碼進行語法、語義分析和錯誤判斷,生成彙編代碼文件。這裏加上 -std=c99與否由系統的c版本決定。

-S 參數:是gcc對目標文件進行編譯,這裏針對的是文件main.i文件。c

gcc -std=c99 -S main.i -o main.s  // 生成main.s

3、彙編(Assembly)命令:把彙編代碼轉換成計算機可認識的二進制文件,即把文本的c語言編譯爲二進制指令。

-c 參數:是gcc對目標文件執行指令轉換的操作。

gcc -std=c99 -c main.c -o main.o  // // 生成main.o

4、鏈接(Linking)命令:把多個*.o文件合併成一個可執行文件,即二進制指令文件。後面的參數是一些代碼依賴庫。

將系統庫函數與main.o進行鏈接,得到可執行的程序,該程序的名字叫main。

gcc -std=c99 -o main main.o -lm -lz -pthread

gcc -o main.i main.c -E  // 生成main.i
gcc -std=c99 -S main.i -o main.s  // 生成main.s
gcc -std=c99 -c main.c -o main.o  // // 生成main.o
gcc -std=c99 -o main main.o -lm -lz -pthread

參考文獻:

如何使用gcc編譯運行C程序?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章