Linux 下 gcc 與 g++的差別__Linux

來源:互聯網
上載者:User
參考網易部落格者“靜心”的部落格——《gcc與g++的區別》結合自己的認識做出的個人領悟。(由於個人水平有限,難免會存在錯誤的地方,請見諒) 一般而言,在Linux下編譯器分為以下4個階段:
預先處理:編譯處理宏定義等宏命令(eg:#define)——產生尾碼為“.i”的檔案     編譯:將預先處理後的檔案轉換成組合語言——產生尾碼為“.s”的檔案     彙編:由彙編產生的檔案翻譯為二進位目標檔案——產生尾碼為“.o”的檔案     串連:多個目標檔案(二進位)結合庫函數等綜合成的能直接獨立執行的執行檔案——產生尾碼為“.out”的檔案 在Linux下執行gcc與g++ 編譯C++檔案的差別: 尾碼為.c的,gcc把它當作是C程式(cc/cpp才判定為C++來源程式),而g++當作是c++程式 gcc無法進行庫檔案的串連,即無法編譯完成步驟4;而g++則能完整編譯出可執行檔。(實質上,g++從步驟1-步驟3均是調用gcc完成,步驟4串連則由自己完成) 下面進行一次簡單的測試: 測試環境:CentOS 6.4 測試命令: gcc -E 執行到步驟1,只處理宏命令,需要用重新導向組建檔案 gcc -S 執行到步驟2,組建檔案.s gcc -c 執行到步驟3,組建檔案.o g++ 分別編譯於串連 .cc檔案與.o檔案 測試代碼:
#include <iostream>using namespace std;int main(){    cout<<"This is a C++ program."<<endl;}
測試結果:
gcc -E 1.cc >> 1.i

vi 1.i


gcc -S 1.cc

vi 1.s


gcc -c 1.cc


接下來測試g++ 1.o 與直接g++ 1.cc的結果:
g++ 1.o -o from_o

運行結果:

g++ 1.cc -o from_cc

運行結果:

若直接用gcc編譯連結c++檔案會出錯,因無法連結。
gcc 1.cc


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.