gcc & g++現在是gnu中最主要和最流行的c & c++編譯器 。g++是c++的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。其實編譯器是根據gcc還是g++來確定是按照c標準還是c++標準編譯鏈結。下面以test.cpp為例:命令: g++ test.cpp功能:生成預設為a.exe的檔案,這個過程包含了編譯和鏈結。再說下-o命令,-o命令表示輸出的意思,gcc/g++命令是非常靈活的,你不指定輸出的檔名的時候預設生成的是.exe檔案。你要輸出test.exe的話可以用:g++ -o test.exe test.cpp。-o命令是輸出的意思,這樣就輸出了test.exe。gcc/g++在執行編譯工作的時候,總共需要以下幾步:
/*************************test.cpp*************************/
#include
static int t = 1;
#define t 9
using namespace std;
typedef int status;
int main()
1.預處理,生成.i的檔案[預處理器cpp]命令:g++ -e test.cpp > test.i 功能:輸出預處理後的檔案,linux下以.i為字尾名。只啟用預處理,這個不生成檔案,你需要把它重定向到乙個輸出檔案裡 。這一步主要做了這些事情:巨集的替換,還有注釋的消除,還有找到相關的庫檔案。用編輯器開啟test.i會發現有很多很多**,你只需要看最後部分就會發現,預處理做了巨集的替換,還有注釋的消除,可以理解為無關**的清除。下面是test.i檔案的最後部分,可以看見巨集的替換和注釋的消除。
# 5 "test.cpp" 2 //在此處將標頭檔案展開
static int t = 1;
using namespace std;
typedef int status;
int main()
2.將預處理後的檔案不轉換成組合語言,生成檔案.s[編譯器egcs]命令:g++ -s test.cpp功能:會生成test.s檔案,.s檔案表示是彙編檔案,用編輯器開啟就都是彙編指令。
3.有彙編變為目標**(機器**)生成.o的檔案[彙編器as]命令:g++ -c test.cpp 功能:.o是gcc生成的目標檔案,除非你是做編譯器和聯結器除錯開發的,否則開啟這種.o沒有任何意義。二進位制機器碼一般人也讀不了。
4.連線目標**,生成可執行程式[鏈結器ld]命令:g++ test.o -l f:\vs2008\vc\include\iostream功能:將.o檔案與所需的庫檔案鏈結整合形成.exe檔案,這就是可執行檔案。-l 表示鏈結,這裡我後面寫的是絕對路徑,相對各人電腦不同在上面各個步驟中你可以用-o命令輸出你自己想要的各種名字。
比如最後乙個命令,用下面的輸出test.exe你可以g++ test.o -o test.exe -l f:\vs2008\vc\include\iostream
$vim yao.cpp
c/c++原標頭檔案(檔案)
預處理程式 處理檔案頭
預處理後檔案.i(檔案)
編譯程式
彙編**.s (檔案)
匯程式設計序
目標檔案.o (檔案)
鏈結程式 處理庫函式檔案
可執行檔案 yao(檔案)
Linux命令執行過程
在 linux 系統中 一切皆檔案 linux 命令也不例外。那麼,當編輯完成 linux 命令並回車後,系統底層到底發生了什麼事情呢?簡單來說,linux 命令的執行過程分為如下 4 個步驟。判斷使用者是否以絕對路徑或相對路徑的方式輸入命令 如 bin ls 如果是的話直接執行。linux 系統會...
linux下命令執行的過程
標籤 linux shell 2014 03 29 14 54 3638人閱讀收藏 舉報 在clui command line user inte ce 與gui對應 模式下,使用者是通過shell與系統互動的。什麼是shell?提示一,提示二 上述兩個材料得知shell也是乙個程式,它與其他程式最...
ping命令執行過程詳解
ping命令執行過程詳解 ping 是我們經常會接觸到的命令,但是大家對這個命令的了解有多少,這個命令的執行過程以及返回過來的資訊代表什麼意思呢?接下來我為大家逐一講解。先看一下 ping 的執行過程 就以這樣乙個網路作為例子 假設有a b c d四台機器,一台路由ra,子網掩碼均為255.255....