整理一下比較常用的g++指令,現在的ide功能很強大,導致我們很難接觸到底層的一些知識,比如編譯的過程,你根本就不知道一段**是怎樣變成乙個可執行程式的。但是想要成為乙個技術大佬,這一關繞不開,早晚得學,今天整理一下。
以如下**為測試用例
#include
using
namespace std;
//wdnmd
#define max 1000
intmain()
return0;
}
從源**到可執行程式需要四步:
g++ -e test.cpp > test.i
這裡將生成的預處理檔案重定向到test.i
中,否則會直接在終端中輸出預處理**
可以檢視test.i
檔案,會發現注釋全部消除了,標頭檔案和巨集也被替換了
g++ -s test.cpp
上面的指令會生成test.s
檔案,開啟後會發現全部都是彙編**,我現在還沒有學彙編,所以只能看出來這是彙編**,具體內容我也看不懂。
如果使用-s
引數生成test.s
檔案,則必須首先生成.i
檔案,否則會出錯
g++ -c test.cpp
上面的指令會生成test.o
檔案,這裡面全是二進位制**,可以使用vim 開啟,然後使用指令:%!xxd
轉化為二進位制的表示形式
g++ -o test test.cpp
經過鏈結之後就會生成可執行程式,上面的是linux下的,如果是windows,應該使用
g++ -o test.exe test.cpp
c編譯過程
編譯的概念 編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。編譯的完整過程 c源程式 預編譯處理 c 編譯 優化程式 s asm 匯程式設計序 obj o a ko 鏈...
c 編譯過程
編譯過程主要分為 4個過程 1 編譯預處理 預編譯程式完成的工作,可以說成是對源程式的 替換 工作。經過這個過程,生成乙個沒有巨集定義 沒有條件編譯指令 沒有特殊符號的輸出檔案。2 編譯 優化階段 通過詞法分析 語法分析,在確認所有的指令都符合語法規則之後,將其翻譯成等價的中間 或彙編 在c 中,以...
C 編譯過程
以helloword.c 程式說明編譯過程 在預設的狀態下,如果我們直接以gcc編譯原始碼,並且沒有加上任何引數,則執行檔案的檔名會被自動設定為a.out 這個檔名。所以你就能夠直接執行 a.out這個這行檔案。hello.c 就是原始碼,gcc是編譯程式,a.out 是編譯成功的可執行檔案。如果我...