Linux下使用最廣泛的C/C++編譯器是GCC,大多數(shù)的Linux發(fā)行版本都默認(rèn)安裝愚臀,不管是開發(fā)人員還是初學(xué)者瓦胎,一般都將GCC作為Linux下首選的編譯工具秃踩。
保存文件后退出艾猜,打開終端并 cd 到當(dāng)前目錄买喧,輸入下面的命令:
gcc test.c -o test
可以直接將C代碼編譯鏈接為可執(zhí)行文件。
可以看到在當(dāng)前目錄下多出一個(gè)文件 test匆赃,這就是可執(zhí)行文件淤毛。不像Windows,Linux不以文件后綴來區(qū)分可執(zhí)行文件算柳,Linux下的可執(zhí)行文件后綴理論上是可以任意更改的低淡。
當(dāng)然,也可以分步編譯:
預(yù)處理
gcc -E test.c -o test.i
在當(dāng)前目錄下會多出一個(gè)預(yù)處理結(jié)果文件 test.i瞬项,打開 test.i 可以看到蔗蹋,在 test.c 的基礎(chǔ)上把stdio.h和stdlib.h的內(nèi)容插進(jìn)去了。編譯為匯編代碼
gcc -S test.i -o test.s
其中-S參數(shù)是在編譯完成后退出囱淋,-o為指定文件名猪杭。匯編為目標(biāo)文件
gcc -c test.s -o test.o
.o就是目標(biāo)文件。目標(biāo)文件與可執(zhí)行文件類似妥衣,都是機(jī)器能夠識別的可執(zhí)行代碼皂吮,但是由于還沒有鏈接,結(jié)構(gòu)會稍有不同税手。鏈接并生成可執(zhí)行文件
gcc test.o -o test
如果有多個(gè)源文件蜂筹,可以這樣來編譯:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
注意:如果不指定文件名,GCC會生成名為a.out的文件芦倒,.out文件只是為了區(qū)分編譯后的文件艺挪,Linux下并沒有標(biāo)準(zhǔn)的可執(zhí)行文件后綴名,一般可執(zhí)行文件都沒有后綴名兵扬。
編譯后生成的test文件就是程序了麻裳,運(yùn)行它:
./test
如果沒有運(yùn)行權(quán)限,可以使用sudo命令來增加權(quán)限(注意要在Linux的分區(qū)下):
sudo cdmod test 777
對于程序的檢錯(cuò)周霉,我們可以用-pedantic掂器、-Wall、-Werror選項(xiàng): ? -pedantic選項(xiàng)能夠幫助程序員發(fā)現(xiàn)一些不符合 ANSI/ISO C標(biāo)準(zhǔn)的代碼(并不是全部)俱箱;
? -Wall可以讓gcc顯示警告信息国瓮;
? -Werror可以讓gcc在編譯中遇到錯(cuò)誤時(shí)停止繼續(xù)。