Linux中g++与gcc的区别
轉(zhuǎn)自:https://blog.csdn.net/bit_clearoff/article/details/53965514
Windows中我們常用vs來(lái)編譯編寫好的C和C++代碼;vs把編輯器,編譯器和調(diào)試器等工具都集成在這一款工具中,在Linux下我們能用什么工具來(lái)編譯所編寫好的代碼呢,其實(shí)Linux下這樣的工具有很多,但我們只介紹兩款常用的工具,它們分別是gcc和g++.
工具用法介紹
gcc和g++的用法都是一樣的,在這里我們只介紹gcc:
上圖介紹了相關(guān)指令和參數(shù)以及該條指令所做的對(duì)應(yīng)的事情。
將c文件轉(zhuǎn)化成C++文件,這個(gè)過(guò)程也叫做預(yù)處理過(guò)程
將預(yù)處理過(guò)程生成的.i后綴的文件轉(zhuǎn)化成匯編文件,里面存儲(chǔ)的是相應(yīng)的匯編代碼,這個(gè)過(guò)程叫做編譯。
將匯編文件中的匯編代碼翻譯成相應(yīng)的機(jī)器語(yǔ)言,這個(gè)過(guò)程叫做匯編。
這條指令是完成鏈接這個(gè)過(guò)程的,它通過(guò)鏈接器ld將運(yùn)行程序的目標(biāo)文件和庫(kù)文件鏈接在一起,生成最后的可執(zhí)行文件
注意:由于g++和gcc的用法相同,所以在這里我們就不直接介紹了
gcc和g++的區(qū)別
編譯c程序
熟悉C++的人應(yīng)該都知道,C++是C語(yǔ)言的超集,編寫C/C++代碼的時(shí)候,有人用gcc,也有人用g++,我們先來(lái)看看gcc和g++是否都能編譯C++和C代碼:
上圖中,我們發(fā)現(xiàn)用gcc和g++分別編譯test.c這個(gè)c文件,發(fā)現(xiàn)都是可執(zhí)行的,實(shí)際上對(duì)于C文件gcc和g++所做的事情確實(shí)是一樣的,g++在編譯C文件時(shí)調(diào)用了gcc.
編譯cpp程序
既然二者對(duì)c程序來(lái)說(shuō)都一樣的,那為什么兩者都存在而不是只存在一個(gè)呢,不要著急,下面我們來(lái)看看他們分別是如何來(lái)編譯C++程序的.
首先我們直接編譯c文件生成可執(zhí)行程序:
我們發(fā)現(xiàn)gcc報(bào)錯(cuò),而g++沒有報(bào)錯(cuò),并且可以執(zhí)行。
下面我們來(lái)看看它們的具體步驟以及錯(cuò)誤原因:
在預(yù)處理階段兩條命令都能夠成功,并且我們觀察gcc和g++各自產(chǎn)生的.i后綴的文件,它們的內(nèi)容都是相同的,所以我們能夠發(fā)現(xiàn)gcc和g++在cpp程序中它們做了相同的事情。
我們發(fā)現(xiàn)gcc編譯test1.i(.cpp生成)的會(huì)出現(xiàn)大篇幅的錯(cuò)誤,圖片中的錯(cuò)誤主要是說(shuō)無(wú)法找到cout函數(shù)的庫(kù)文件,而g++去可以通過(guò)編譯并且生成匯編文件,這件事情說(shuō)明gcc無(wú)法自動(dòng)和c++的庫(kù)文件進(jìn)行連接,導(dǎo)致了庫(kù)函數(shù)沒有申明的錯(cuò)誤.
這個(gè)過(guò)程應(yīng)該都沒有問(wèn)題,因?yàn)檫@個(gè)過(guò)程只是將后綴為.s文件中的匯編語(yǔ)言轉(zhuǎn)換成了相應(yīng)的機(jī)器語(yǔ)言。所以gcc和g++應(yīng)該在這個(gè)過(guò)程中做了同樣的事情。
這個(gè)階段也出現(xiàn)了問(wèn)題,用gcc將.cpp后綴產(chǎn)生的.o文件轉(zhuǎn)換成可執(zhí)行文件時(shí)出現(xiàn)了錯(cuò)誤,而g++卻可以轉(zhuǎn)換成功并且能夠正確執(zhí)行。這個(gè)還是因?yàn)間cc無(wú)法將庫(kù)文件與.o后綴的文件關(guān)聯(lián)在一起生成可執(zhí)行程序,而g++可以完成這項(xiàng)工作。
總結(jié)
gcc和g++的區(qū)別主要是在對(duì)cpp文件的編譯和鏈接過(guò)程中,因?yàn)閏pp和c文件中庫(kù)文件的命名方式不同,那為什么g++既可以編譯C又可以編譯C++呢,這時(shí)因?yàn)間++在內(nèi)部做了處理,默認(rèn)編譯C++程序,但如果遇到C程序,它會(huì)直接調(diào)用gcc去編譯.
總結(jié)
以上是生活随笔為你收集整理的Linux中g++与gcc的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 熬糖锅边没水蒸汽了是多少度?求大神指点
- 下一篇: 如何正确储存各种食材?