3. 總結
windows中我們常用vs來編譯編寫好的c和c++**;vs把編輯器,編譯器和偵錯程式等工具都整合在這一款工具中,在linux下我們能用什麼工具來編譯所編寫好的**呢,其實linux下這樣的工具有很多,但我們只介紹兩款常用的工具,它們分別是gcc和g++.
gcc和g++的用法都是一樣的,在這裡我們只介紹gcc:
熟悉c++的人應該都知道,c++是c語言的超集,編寫c/c++**的時候,有人用gcc,也有人用g++,我們先來看看gcc和g++是否都能編譯c++和c**:
上圖中,我們發現用gcc和g++分別編譯test.c這個c檔案,發現都是可執行的,實際上對於c檔案gcc和g++所做的事情確實是一樣的,g++在編譯c檔案時呼叫了gcc.
既然二者對c程式來說都一樣的,那為什麼兩者都存在而不是只存在乙個呢,不要著急,下面我們來看看他們分別是如何來編譯c++程式的。
首先我們直接編譯c檔案生成可執行程式:
我們發現gcc報錯,而g++沒有報錯,並且可以執行。
下面我們來看看它們的具體步驟以及錯誤原因:
預編譯
在預處理階段兩條命令都能夠成功,並且我們觀察gcc和g++各自產生的.i字尾的檔案,它們的內容都是相同的,所以我們能夠發現gcc和g++在cpp程式中它們做了相同的事情。
編譯
我們發現gcc編譯test1.i(.cpp生成)的會出現大篇幅的錯誤,中的錯誤主要是說無法找到cout函式的庫檔案,而g++去可以通過編譯並且生成彙編檔案,這件事情說明gcc無法自動和c++的庫檔案進行連線,導致了庫函式沒有宣告的錯誤.
彙編這個過程應該都沒有問題,因為這個過程只是將字尾為.s檔案中的組合語言轉換成了相應的機器語言。所以gcc和g++應該在這個過程中做了同樣的事情。鏈結
這個階段也出現了問題,用gcc將.cpp字尾產生的.o檔案轉換成可執行檔案時出現了錯誤,而g++卻可以轉換成功並且能夠正確執行。這個還是因為gcc無法將庫檔案與.o字尾的檔案關聯在一起生成可執行程式,而g++可以完成這項工作。
gcc和g++的區別主要是在對cpp檔案的編譯和鏈結過程中,因為cpp和c檔案中庫檔案的命名方式不同,那為什麼g++既可以編譯c又可以編譯c++呢,這時因為g++在內部做了處理,預設編譯c++程式,但如果遇到c程式,它會直接呼叫gcc去編譯。
gcc和g 的區別
gcc和g 都是gnu 組織 的乙個編譯器。誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1.字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些...
GCC和G 的區別
gcc和g 都是gnu 組織 的乙個編譯器。誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1.字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些...
gcc和g 的區別
誤區一 gcc只能編譯c g 只能編譯c 兩者都可以,但是請注意 1.字尾為.c的,gcc把它當作是c程式,而g 當作是c 程式 字尾為.cpp的,兩者都會認為是c 程式,注意,雖然c 是c的超集,但是兩者對語法的要求是有區別的。c 的語法規則更加嚴謹一些。2.編譯階段,g 會呼叫gcc,對於c 兩...