Linux下gcc和g++的區別


首先編寫了第一個C++程序,Hello,world!

#include <iostream>
using namespace std;
void main()
...{
cout << "Hello,world!" <<endl;
return;
}


用命令:GCC -o test test.cpp編譯,有問題。然后分析,即分開運行GCC.

GCC -c -o test.o test.cpp。成功執行。

GCC -o test test.o。出現一堆鏈接錯誤。

g++ -o test test.o。成功執行。

由此發現,GCC與g++還有有一些區別的。

GCC and g++分別是gnu的c & c++編譯器 GCC/g++在執行編譯工作的時候,總共需要4步

 
1.預處理,生成.i的文件[ 預處理器cpp
2.將預處理后的文件不轉換成匯編語言,生成文件.s[ 編譯器ccl
3.有匯編變為目標代碼(機器代碼)生成.o的文件[ 匯編器as
4.連接目標代碼,生成可執行程序[ 鏈接器ld], Eg: 將print.o文件連接合並到hello.o文件中

1 :兩者都可以編譯C和C++代碼,但是請注意:
(1).后綴為.c的,GCC把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。C++的語法規則更加嚴謹一些。

(2).編譯階段,g++會調用GCC,對於c++代碼,兩者是等價的,但是因為GCC命令不能自動和C++程序使用的庫聯接,所以通常用g++來完成鏈接,為了統一起見,干脆編譯/鏈接統統用g++了,這就給人一種錯覺,好像cpp程序只能用g++似的。

2 :對於__cplusplus宏,實際上,這個宏只是標志着編譯器將會把代碼按C還是C++語法來解釋,如上所述,如果后綴為.c,並且采用GCC編譯器,則該宏就是未定義的,否則,就是已定義

 
3 : 編譯可以用GCC/g++,而鏈接可以用g++或者GCC -lstdc++。因為GCC命令不能自動和C++程序使用的庫聯接,所以通常使用g++來完成聯接。但在編譯階段,g++會自動調用GCC,二者等價。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM