歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

GCC/G++基本命令簡介

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++在執行編譯工作的時候,總共需要以下幾步:

  1.   /************************* 
  2.         Test.cpp 
  3.     *************************/  
  4.     #include <IOSTREAM>   
  5.   
  6.     static int t = 1;  
  7.     #define T 9   
  8.   
  9.     using namespace std;  
  10.   
  11.     typedef int Status;  
  12.   
  13.     int main()  
  14.     {  
  15.         Status i = 1;  
  16.         cout << T * i << endl; //Test Cout   
  17.         return 0;  
  18.     }

1.預處理,生成.i的文件[預處理器cpp]

命令:g++ -E Test.cpp > Test.i 

功能:輸出預處理後的文件,linux下以.i為後綴名。只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件裡 。這一步主要做了這些事情:宏的替換,還有注釋的消除,還有找到相關的庫文件。用編輯器打開Test.i會發現有很多很多代碼,你只需要看最後部分就會發現,預處理做了宏的替換,還有注釋的消除,可以理解為無關代碼的清除。下面是Test.i文件的最後部分,可以看見宏的替換和注釋的消除。

  1.  # 5 "Test.cpp" 2  
  2.   
  3. static int t = 1;  
  4.   
  5. using namespace std;  
  6.   
  7. typedef int Status;  
  8.   
  9. int main()  
  10. {  
  11.  Status i = 1;  
  12.  cout << 9 * i << endl;  
  13.  return 0;  
  14. }

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


寫了上面的就希望能夠理解整個源文件是怎麼變成可執行文件的,gcc/g++確實是很給力的啊····(*^__^*)
Copyright © Linux教程網 All Rights Reserved