天天看點

GCC知識gcc隻是編譯器嗎?GNU其他工具?參數

像c語言這樣的靜态語言,運作的步驟是先将c經過編譯器轉化成彙編語言,彙編語言再經過彙編器轉化成機器語言子產品,然後連結器将程式的機器語言子產品和庫程式的機器語言子產品和起來,生成可執行檔案,最後再由加載器加載這個可執行檔案,産生輸入輸出。

在這個環節中,gcc就是扮演着編譯器的角色。gcc原本隻能編譯c語言,但是後來,經過擴充之後也能處理java/oc等語言了。gcc現在已經成為類unix作業系統的标準編譯器了。是以在linux上源碼編譯軟體前大都要先安裝gcc。

gcc可以完成從進階語言c變為和執行檔案.out的過程。它預設也是有編譯連結的功能。gcc有個參數-c 是來控制是否要連結成可執行檔案。編譯c之後會生成.o的目标檔案,連結之後會生成.out的可執行檔案。

gcc在這個過程中雖然隻是完成編譯工作,但是它會調用彙編器(as),連結器(ld)來完成整個代碼編譯解釋過程。

gdb(gnu除錯器)也是gnu工程開發出來的調試工具。能對gcc編譯連結出來的可執行檔案進行定點調試。

gprof(gnu測量器)是測試程式中函數的性能的工具。

g++(c++編譯器)和gcc差不多,隻是目智語言是c++。

比如go/src/make.bash中有一個gcc生成dist的例子:

gcc mflag−o2−wall−werror−ggdb−ocmd/dist/dist−icmd/dist"mflag−o2−wall−werror−ggdb−ocmd/dist/dist−icmd/dist"defgoroot" cmd/dist/*.c

将其中的參數按照上下文轉換後如下:

gcc -m64 -o2 -wall -werror -ggdb -o cmd/dist/dist -icmd/dist -dgoroot_final="$goroot_final" cmd/dist/*.c

gcc的參數很多,種類分為幾種:

GCC知識gcc隻是編譯器嗎?GNU其他工具?參數

-m64:配置相關選項,代表這個程式的主控端器cpu架構是amd64

-o2: 優化選項,對程式進行o2級别的優化

-wall: 警告選項,生成所有警告資訊

-werror: 警告選項,将所有warning當作error處理

-ggdb: 調試選項,編譯過程生成調試資訊,以便gdb進行調試。

-o: 總體選項,制定生成的可執行檔案。如果不指定的話,就預設是xx.out

-i: 目錄選項,進行頭檔案查詢的時候被指定的目錄也需要進行搜尋

-dgoroot_final="$goroot_final" 這個是在預處理過程的時候設定goroot_final

最後的cmd/dist/*.c就是源檔案了,表示源檔案是這個目錄下的所有.c檔案