Linux C/C++ 編譯器cc\gcc\g++\c++區別
阿新 • • 發佈:2018-12-20
使用Linux系統的編譯c或者c++的人,都知道Linux系統的編譯器有cc\gcc\g++\c++,但是他們之間到底是什麼關係呢?
首先到系統的/usr/bin路徑下,使用命令:ll | grep cc,可以看到如下:
由此,可以知道LInux系統下,cc就是gcc。
關於c++和g++也都在/usr/bin路徑下,檢視c++和g++的資訊如下:
兩個檔案的大小是一樣的,再進一步通過命令:diff c++ g++, 結果如下:
兩個檔案的內容也是一樣的。所以,c++就是g++。至於為什麼是兩個檔案,而不是使用連線,這個就不知道了。
那麼看上去四個編譯器,現在本質上只剩下兩個了,也就是gcc和g++。
通過名字就很容易猜想到:gcc是編譯c語言的,g++是編譯C++語言的。其實非也。你也可以通過gcc -xc++ -lstdc++ -shared-libgcc也編譯c++原始碼。
gcc和g++其實只是個外殼,在編譯的時候,最終決定是呼叫後臺的cc1還是cc1plus。編譯的語言是可以通過編譯選項-x來指定。
那麼gcc和g++主要的區別是:編譯時自動連線的庫的不同。g++會自動連線std c++的庫,而gcc不會。所以,使用gcc編譯c++的程式碼,如果c++的程式碼中使用了std的類,例如:vector,會出現連接出錯。
g++還有一個不同就是編譯cpp檔案時,會有一些預定義的巨集:
#define __GXX_WEAK__ 1
#define __cplusplus 1
#define __DEPRECATED 1
#define __GNUG__ 4
#define __EXCEPTIONS 1
#define __private_extern__ extern
總之,不管如何,既然已經分為gcc和g++了,儘量用gcc編譯C語言程式,使用g++編譯c++程式;如果有的程式是兩種語言混合的,那就只能使用g++了,對於c語言,可以使用extern “C” 來標識,讓編譯把他當做c語言來編譯即可。