作者:嵌入式歷練者
ID : Eterlove
記下相關筆記,記錄我的學習生活!站在巨人的肩上Standing on Shoulders of Giants!
該文章為原創,轉載請注明出處和作者:https://blog.csdn.net/Eterlove/article/details/120929816
linux下的Gcc故事
- 1.g++/gcc的區別
- 2.程式的編譯程序
- 3.談談源檔案后綴名
- 4.掌味訓本命令
1.g++/gcc的區別
【!】gcc
認為預處理后的檔案(.i)是 C 檔案,并且設定 C 形式的連接.
【!】g++
認為預處理后的檔案(.i)是 C++檔案,并且設定 C++形式的連接.
2.程式的編譯程序
- 嚴格來說,源程式經過預處理(preprocessing), 編譯(compilation), 匯編 (assembly),鏈接(linking)四個階段生成可執行檔案(a.out/a.exe)
- 在windows上生成可執行檔案a.exe,而在Linux上生成a.out,當然你可以重新起個名字,
先來看這段代碼,現在Linux上編譯這個hello.c這個源檔案,并生成可執行檔案,
gcc hello.c -o www
這段代碼告訴編譯器編譯hello.c檔案,并生成一個名為www的可執行檔案
-o是引數,給生成的檔案起一個自己想要的名字,格式:-o 檔案名(中間有個空格)
當然,-o引數位置可變,例如
gcc -o www hello.c
3.談談源檔案后綴名
這個來自于Gcc手冊,目前也有熱心網友中文翻譯的,中文有疑惑的以Gcc英文為準,
源檔案后綴名指出語言種類以及后期的操作
.c C 源程式;預處理,編譯,匯編
.C C++源程式;預處理,編譯,匯編
.cc C++源程式;預處理,編譯,匯編
.cxx C++源程式;預處理,編譯,匯編
.m Objective-C 源程式;預處理,編譯,匯編
.i 預處理后的 C 檔案;編譯,匯編
.ii 預處理后的 C++檔案;編譯,匯編
.s 匯編語言源程式;匯編
.S 匯編語言源程式;預處理,匯編
.h 前處理器檔案;通常不出現在命令列上
.o 目標檔案(Object file)
.a 歸檔庫檔案(Archive file)
4.掌味訓本命令
接下來我們先來寫個超簡單的代碼:
創建一個hello.c,在vim編輯器寫下hello代碼
[root@localhost home]# ls
cheng
[root@localhost home]# touch hello.c
[root@localhost home]# vi hello.c
[root@localhost home]# gcc hello.c
[root@localhost home]# ls
a.out cheng hello.c
[root@localhost home]# ./a.out
hello
#include"stdio.h"
int main()
{
printf("hello\n");
return 0;
}
如上所知,在沒有加上引數-o,默認生成了a.out,執行檔案a.out輸出得到hello
【引數】-o filename 指定輸出的檔案為filename
我們繼續這段代碼,給編譯后生成的可執行檔案起個名字www
gcc hello.c -o www
或gcc -o www hello.c
[root@localhost home]# gcc -o www hello.c
[root@localhost home]# ls
a.out cheng hello.c www
[root@localhost home]# ./www
hello
【引數】-E 預處理后即停止,不進行編譯.預處理后的代碼送往標準輸出
可以使用-o 選項選擇其他名字.
我們來看看只經過預處理階段的代碼:
gcc -E hello.c -o pre
當然你也能這樣gcc -o pre -E hello.c
cat pre
驗證命令是否正確,沒有比自己親手去試一試更好的方法!
用cat指令查看pre檔案內容(不為只預處理后檔案起個名字,它將在終端顯示出來)

【引數】-S(注:大寫) 編譯后即停止,不進行匯編.對于每個輸入的非匯編語言檔案,輸出檔案是匯編語言檔案,可以使用-o 選項選擇其他名字,
[root@localhost home]# gcc -o pre -E hello.c
[root@localhost home]# gcc -S hello.c
[root@localhost home]# ls
a.out cheng hello.c hello.s pre www
cat hello.s

這段匯編代碼對于匯編程式員很熟悉,
【注意-s(小寫的s)】
經過驗證,發現gcc -s www.c會在沒有指定檔案名的情況下直接生成a.out可執行檔案(Linux),跟gcc www.c結果一致,
【引數】-c 匯編源檔案,但是不作連接.簡單說就是完成前三個階段,生成.o檔案不做鏈接,編譯器輸出對應于源檔案的目標檔案,可以使用-o 選項選擇其他名字,
[root@localhost home]# gcc -c hello.c
[root@localhost home]# ls
a.out cheng hello.c hello.o hello.s pre www
[root@localhost home]# vi hello.o
當你用vi編輯器打開hello.o時,你會發現看不懂,看不懂就對了,那是給機器看的機器碼,只是未進行鏈接生成可執行檔案,

這些基本命令學會就夠用了,若遇到其他的會查Gcc手冊就行,如果需要Gcc中文手冊,評論區@我,以前還有上傳免費資源,現在平臺沒有了,所以需要的私信我就可以了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/335535.html
標籤:其他
上一篇:Qt配置系統之保存功能
下一篇:環形鏈表問題
