日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux中g++与gcc的区别

發(fā)布時間:2025/3/8 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux中g++与gcc的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:https://blog.csdn.net/bit_clearoff/article/details/53965514
Windows中我們常用vs來編譯編寫好的C和C++代碼;vs把編輯器,編譯器和調(diào)試器等工具都集成在這一款工具中,在Linux下我們能用什么工具來編譯所編寫好的代碼呢,其實Linux下這樣的工具有很多,但我們只介紹兩款常用的工具,它們分別是gcc和g++.

工具用法介紹

gcc和g++的用法都是一樣的,在這里我們只介紹gcc:

上圖介紹了相關(guān)指令和參數(shù)以及該條指令所做的對應(yīng)的事情。

  • gcc -E filename.c -o filename.i
    將c文件轉(zhuǎn)化成C++文件,這個過程也叫做預(yù)處理過程
  • gcc -S filename.i -o filename.s
    將預(yù)處理過程生成的.i后綴的文件轉(zhuǎn)化成匯編文件,里面存儲的是相應(yīng)的匯編代碼,這個過程叫做編譯。
  • gcc -c filename.s -o filename.o
    將匯編文件中的匯編代碼翻譯成相應(yīng)的機器語言,這個過程叫做匯編。
  • gcc filename.o -o filename.exe
    這條指令是完成鏈接這個過程的,它通過鏈接器ld將運行程序的目標(biāo)文件和庫文件鏈接在一起,生成最后的可執(zhí)行文件
  • 生成可執(zhí)行文件后,我們就能夠調(diào)用相應(yīng)的程序了。
    注意:由于g++和gcc的用法相同,所以在這里我們就不直接介紹了
  • gcc和g++的區(qū)別

    編譯c程序

    熟悉C++的人應(yīng)該都知道,C++是C語言的超集,編寫C/C++代碼的時候,有人用gcc,也有人用g++,我們先來看看gcc和g++是否都能編譯C++和C代碼:

    上圖中,我們發(fā)現(xiàn)用gcc和g++分別編譯test.c這個c文件,發(fā)現(xiàn)都是可執(zhí)行的,實際上對于C文件gcc和g++所做的事情確實是一樣的,g++在編譯C文件時調(diào)用了gcc.

    編譯cpp程序

    既然二者對c程序來說都一樣的,那為什么兩者都存在而不是只存在一個呢,不要著急,下面我們來看看他們分別是如何來編譯C++程序的.
    首先我們直接編譯c文件生成可執(zhí)行程序:

    我們發(fā)現(xiàn)gcc報錯,而g++沒有報錯,并且可以執(zhí)行。

    下面我們來看看它們的具體步驟以及錯誤原因:

  • 預(yù)處理

    在預(yù)處理階段兩條命令都能夠成功,并且我們觀察gcc和g++各自產(chǎn)生的.i后綴的文件,它們的內(nèi)容都是相同的,所以我們能夠發(fā)現(xiàn)gcc和g++在cpp程序中它們做了相同的事情。
  • 編譯

    我們發(fā)現(xiàn)gcc編譯test1.i(.cpp生成)的會出現(xiàn)大篇幅的錯誤,圖片中的錯誤主要是說無法找到cout函數(shù)的庫文件,而g++去可以通過編譯并且生成匯編文件,這件事情說明gcc無法自動和c++的庫文件進行連接,導(dǎo)致了庫函數(shù)沒有申明的錯誤.
  • 匯編
    這個過程應(yīng)該都沒有問題,因為這個過程只是將后綴為.s文件中的匯編語言轉(zhuǎn)換成了相應(yīng)的機器語言。所以gcc和g++應(yīng)該在這個過程中做了同樣的事情。
  • 鏈接

    這個階段也出現(xiàn)了問題,用gcc將.cpp后綴產(chǎn)生的.o文件轉(zhuǎn)換成可執(zhí)行文件時出現(xiàn)了錯誤,而g++卻可以轉(zhuǎn)換成功并且能夠正確執(zhí)行。這個還是因為gcc無法將庫文件與.o后綴的文件關(guān)聯(lián)在一起生成可執(zhí)行程序,而g++可以完成這項工作。
  • 總結(jié)

    gcc和g++的區(qū)別主要是在對cpp文件的編譯和鏈接過程中,因為cpp和c文件中庫文件的命名方式不同,那為什么g++既可以編譯C又可以編譯C++呢,這時因為g++在內(nèi)部做了處理,默認(rèn)編譯C++程序,但如果遇到C程序,它會直接調(diào)用gcc去編譯.

    總結(jié)

    以上是生活随笔為你收集整理的Linux中g++与gcc的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。