gcc/g++執行的步驟及參數簡介

來源:互聯網
上載者:User

(本文為自己參考網上的資料整理所得,如果有所紕漏或者錯誤,請留言指明!謝謝!)       

       gcc可以用來編譯連結.c來源程式,gcc同樣可以編譯.cpp檔案,但是不能連結.cpp檔案產生可執行檔。只有g++可以編譯並且連結.cpp,g++在編譯.cpp檔案的時候自動調用gcc進行源檔案的編譯。

       下面來看看gcc/g++常用的參數。


一、gcc/g++常用的參數

-IDir

指定額外的標頭檔搜尋目錄,編譯器首先在Dir中尋找,然後按照常規的順序搜尋標頭檔。

-include file

相當於在來源程式中添加標頭檔,相當於#include "file"。

-LDir

指定編譯的時候編譯器搜尋的庫路徑。

-lLIBRARY

指定編譯的時候使用的庫。

-E

只啟用預先處理功能。

-S

只啟用先行編譯和編譯功能。

-c

只啟用預先處理、編譯和彙編功能。

-shared

產生共用目標檔案,通常用於建立共用庫時使用。

-static

禁止使用共用庫。

-w

不產生任何警告資訊。

-Wall

產生所有警告資訊。

-C

在預先處理的時候不刪除注釋資訊,一般和-E聯合使用,用於剖析器。

-M

組建檔案的關聯資訊,包含目標檔案產生所依賴的所有原始碼。

-MM

和上面的一樣,但是忽略標頭檔造成的依賴關係。

-MD、-MMD

對應和-M、-MM相同,只不過將輸出輸入到.d檔案中去。


二、gcc/g++執行的四個步驟

        g++命令在最後產生可執行檔之前經曆了四個步驟,分別是預先處理、編譯、彙編和連結。我們通過使用g++的命令選項來查看g++命令執行過程中的步驟和每一步的組建檔案。

(1)前置處理器(前置處理器cpp)

g++ -E main.cpp > main.i

       上面的命令只啟用預先處理,該過程並不組建檔案,我們採用輸出重新導向到main.i檔案中。預先處理主要是文法的檢查、宏替換、注釋的消除和找到相應的庫檔案。

(2)將預先處理後的檔案轉換成組合語言程式(編譯器egcs)

g++ -S main.i

       上面的命令執行完成後產生main.s檔案,這是一個組合語言來源程式。

(3)將組合語言來源程式轉換成為目標檔案二進位機器碼(彙編器as)

g++ -c main.i

       該命令執行之後產生main.o目標檔案,這就是二進位機器碼。

(4)連結目標檔案產生可執行程式(連結器ld)

g++ main.o

       該命令執行之後便預設產生一個a.out的可執行檔,該過程是將main.o和所需的其他庫檔案連結產生可執行檔。

       上面的四個步驟就是g++將原始碼產生可執行檔經曆的四個步驟。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.