C/C++編譯器GCC下的常用編譯命令總結(jié)
簡(jiǎn)介
GCC的意思是GUN C Compiler。經(jīng)過(guò)了多年的發(fā)展,GCC已經(jīng)不僅僅能支持C語(yǔ)言了,它現(xiàn)在還支持Ada語(yǔ)言、C++語(yǔ)言、Java語(yǔ)言、Objective C語(yǔ)言、Pascal語(yǔ)言、COBOL語(yǔ)言,以及支持函數(shù)式編程和邏輯編程的Mercury語(yǔ)言等等。而GCC也不再單只是GUN C語(yǔ)言編譯器的意思了,而是變成了GUN Complier Collection也即是GUN編譯器家族的意思了。另一方面,說(shuō)到GCC對(duì)于操作系統(tǒng)平臺(tái)以及硬件平臺(tái)支持,概括起來(lái)就一句話:無(wú)所不在。
編譯
示例程序如下:
#include <stdio.h> int main(void) { printf("Hello World!\n"); return 0; }
這個(gè)程序,一步到位的編譯指令是:
gcc -o test test.c
實(shí)質(zhì)上,上述編譯過(guò)程是分為四個(gè)階段進(jìn)行的:
- 預(yù)處理(也稱為預(yù)編譯,Preprocessing)
- 編譯(Compilation)
- 匯編(Assembly)
- 連接(Linking)
預(yù)處理
gcc -E test.c -o test.i 或 gcc -E test.c
可以輸出test.i文件中存放著test.c經(jīng)預(yù)處理之后的代碼。打開(kāi)test.i文件,看一看,就明白了。后面那條指令,是直接在命令行窗口中輸出預(yù)處理后的代碼。
gcc的-E選項(xiàng),可以讓編譯器在預(yù)處理后停止,并輸出預(yù)處理結(jié)果。在本例中,預(yù)處理結(jié)果就是將stdio.h文件中的內(nèi)容插入到test.c中了
編譯為匯編代碼
預(yù)處理之后,可直接對(duì)生成的test.i文件編譯,生成匯編代碼:
gcc -S test.i -o test.s
gcc的-S選項(xiàng),表示在程序編譯期間,在生成匯編代碼后,停止,-o輸出匯編代碼文件
匯編
對(duì)于上一小節(jié)生成的匯編代碼文件test.s,gas匯編器負(fù)責(zé)將其編譯為目標(biāo)文件,如下:
gcc -c test.s -o test.o
連接
gcc連接器是gas提供的,負(fù)責(zé)將程序的目標(biāo)文件與所需的所有附加的目標(biāo)文件連接起來(lái),最終生成可執(zhí)行文件。附加的目標(biāo)文件包括靜態(tài)連接庫(kù)和動(dòng)態(tài)連接庫(kù)。
對(duì)于上一小節(jié)中生成的test.o,將其與c標(biāo)準(zhǔn)輸入輸出庫(kù)進(jìn)行連接,最終生成程序test
gcc test.o -o test
在命令行窗口中執(zhí)行./test,讓它說(shuō)Hello World!吧
- 解決gcc編譯報(bào)錯(cuò)unknown type name ‘bool‘問(wèn)題
- 使用MinGW使Windows通過(guò)gcc實(shí)現(xiàn)C或C++程序本地編譯執(zhí)行的方法
- GCC 編譯c程序的方法及過(guò)程解析
- linux使用gcc編譯c語(yǔ)言共享庫(kù)步驟
- GCC 編譯使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的方法
- Linux上安裝GCC編譯器過(guò)程
- Linux系統(tǒng)下gcc命令使用詳解
- Linux gcc命令的具體使用
- GCC編譯過(guò)程(預(yù)處理,編譯,匯編,鏈接)及GCC命令詳解
相關(guān)文章
詳解C++編程中類(lèi)的成員變量和成員函數(shù)的相關(guān)知識(shí)
這篇文章主要介紹了C++編程中類(lèi)的成員變量和成員函數(shù)的相關(guān)知識(shí),是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09C++深入探究類(lèi)與對(duì)象之對(duì)象模型與this指針使用方法
C++對(duì)象模型中只有類(lèi)的非static成員以及一個(gè)指向虛函數(shù)表的指針被配置于類(lèi)對(duì)象內(nèi),其他都在類(lèi)對(duì)象外,在 C++ 中,每一個(gè)對(duì)象都能通過(guò) this 指針來(lái)訪問(wèn)自己的地址。this 指針是所有成員函數(shù)的隱含參數(shù)。因此,在成員函數(shù)內(nèi)部,它可以用來(lái)指向調(diào)用對(duì)象2022-04-04淺析棧區(qū)和堆區(qū)內(nèi)存分配的區(qū)別
以下是對(duì)棧區(qū)和堆區(qū)內(nèi)存分配的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08C語(yǔ)言從代碼中加載動(dòng)態(tài)鏈接庫(kù)過(guò)程解析
這篇文章主要介紹了C語(yǔ)言從代碼中加載動(dòng)態(tài)鏈接庫(kù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Visual?Studio下Eigen庫(kù)環(huán)境配置方式
這篇文章主要介紹了Visual?Studio下Eigen庫(kù)環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[四]
C 語(yǔ)言基礎(chǔ)教程(我的C之旅開(kāi)始了)[四]...2007-02-02簡(jiǎn)單了解C++常見(jiàn)編程問(wèn)題解決方案
這篇文章主要介紹了C++常見(jiàn)編程問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07