1. 程式人生 > >linux下安裝gcc,g++

linux下安裝gcc,g++

這幾天初學Linux下的C/C++程式設計,有些體會,寫下來分享一下。

首先編寫了第一個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[編譯器egcs] 
3.有彙編變為目的碼(機器程式碼)生成.o的檔案[彙編器as] 
4.連線目的碼,生成可執行程式[連結器ld]

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,二者等價。