FreeBSD中的GNU C編譯器--編譯器GCC(轉)
FreeBSD中的GNU C編譯器--編譯器GCC(轉)[@more@]最基本的開發環境必須具備 C語言的支援能力,C作為一種編譯型的高階語言,這就是說執行C程式之前要將其先編譯成可執行的由機器指令構成的執行程式,因此就需要使用一個編譯器來對C原始碼進行處理,FreeBSD使用的是GNU的C編譯器。GCC作為當前最流行的、支援平臺數量最多的編譯器,其效能和效率也非常之好。
按照 C語言的習慣,第一個程式通常為hello.c:
$ cat hello.c
main()
{
printf( “ Hello, world!n ” );
}
簡單的編譯過程如下:
$ cc hello.c
$ ./a.out
Hello, world!
UNIX下預設使用a.out作為生成的檔名,可以使用-o引數指出生成的執行檔名。
事實上前面的編譯生成執行檔案的過程由兩步組成,一是生成目標檔案,通常使用 .o為字尾,然後進行連線生成執行檔案。
因此,可以使用 ar將多個目標檔案組合成一個函式庫檔案,而可以使用nm來檢視庫檔案的內容。
$ cc -c f1.c
$ cc -c f2.c
$ ar c mlib.a f1.o f2.o
$ nm mlib.a
FreeBSD使用的C語言編譯器gcc是一種非常流行的,多平臺、高效率的C語言編譯器,它提供了多種選項用於生成應用軟體。以下為常用的一些選項:
-L
定義連線庫檔案的目錄
-I
定義 C原始碼的標頭檔案的目錄
-o
後面跟的引數為要生成的執行檔案的名
-O
進行編譯最佳化,可以指定使用不同的最佳化級別,從 O2到O6,每個不同的級別使用的最佳化設定不同。
相關的選項還有定義生成的指令碼型別的引數,如 -m486生成486指令,預設的gcc版本(2.7.2)不支援Pentium程式碼。
-g
加入除錯程式碼,可以在完成後使用 strip命令刪除用於除錯的資訊
-c
僅僅進行編譯而不進行連線,生成目標檔案
-fPic
生成相對地址的程式碼,可用於最後生成動態連線庫
-static
強制生成靜態連線的程式
-aout
生成 a.out格式的執行檔案、目的碼等,預設使用ELF格式
-elf
3.0之後為預設設定,生成ELF格式的目標和執行程式碼
可以透過命令列引數檢視當前使用的 GNU C編譯器的版本:
$ cc -version
Gcc version 2.7.2.1
FreeBSD當前使用GNU的C編譯器有時候不是gcc編譯器的最新版本,因為有時候最新版本的軟體不可避免的有些小問題。當然,使用者完全可以自己手工升級到最新版本的gcc,這可是一個有趣的聯絡。
按照 C語言的習慣,第一個程式通常為hello.c:
$ cat hello.c
main()
{
printf( “ Hello, world!n ” );
}
簡單的編譯過程如下:
$ cc hello.c
$ ./a.out
Hello, world!
UNIX下預設使用a.out作為生成的檔名,可以使用-o引數指出生成的執行檔名。
事實上前面的編譯生成執行檔案的過程由兩步組成,一是生成目標檔案,通常使用 .o為字尾,然後進行連線生成執行檔案。
因此,可以使用 ar將多個目標檔案組合成一個函式庫檔案,而可以使用nm來檢視庫檔案的內容。
$ cc -c f1.c
$ cc -c f2.c
$ ar c mlib.a f1.o f2.o
$ nm mlib.a
FreeBSD使用的C語言編譯器gcc是一種非常流行的,多平臺、高效率的C語言編譯器,它提供了多種選項用於生成應用軟體。以下為常用的一些選項:
-L
定義連線庫檔案的目錄
-I
定義 C原始碼的標頭檔案的目錄
-o
後面跟的引數為要生成的執行檔案的名
-O
進行編譯最佳化,可以指定使用不同的最佳化級別,從 O2到O6,每個不同的級別使用的最佳化設定不同。
相關的選項還有定義生成的指令碼型別的引數,如 -m486生成486指令,預設的gcc版本(2.7.2)不支援Pentium程式碼。
-g
加入除錯程式碼,可以在完成後使用 strip命令刪除用於除錯的資訊
-c
僅僅進行編譯而不進行連線,生成目標檔案
-fPic
生成相對地址的程式碼,可用於最後生成動態連線庫
-static
強制生成靜態連線的程式
-aout
生成 a.out格式的執行檔案、目的碼等,預設使用ELF格式
-elf
3.0之後為預設設定,生成ELF格式的目標和執行程式碼
可以透過命令列引數檢視當前使用的 GNU C編譯器的版本:
$ cc -version
Gcc version 2.7.2.1
FreeBSD當前使用GNU的C編譯器有時候不是gcc編譯器的最新版本,因為有時候最新版本的軟體不可避免的有些小問題。當然,使用者完全可以自己手工升級到最新版本的gcc,這可是一個有趣的聯絡。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-958895/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- GCC編譯器背後的故事GC編譯
- 探索gcc編譯最佳化細節 編譯器最佳化gcc -o3GC編譯
- Linux中gcc編譯工具LinuxGC編譯
- 淺談彙編器、編譯器和直譯器編譯
- C++編譯器優化C++編譯優化
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- linux 改變GCC編譯器的位元組對齊方式LinuxGC編譯
- 原創 【CentOS Linux 7】實驗4【gcc編譯器】CentOSLinuxGC編譯
- 編譯器的自展和自舉、交叉編譯編譯
- 安裝c, c++編譯器 on AIXC++編譯AI
- vue編譯器Vue編譯
- CUDAFORTRAN編譯器編譯
- -debug(C# 編譯器選項)C#編譯
- Go編譯器簡介【譯】Go編譯
- Ubuntu 19.10將使用GCC 9作為預設編譯器UbuntuGC編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- Notepad++編譯和執行C語言 (GCC)編譯C語言GC
- gcc 和 g++ 的聯絡和區別,使用 gcc 編譯 c++GC編譯C++
- C2000 編譯器下載地址編譯
- C語言編譯器手機版C語言編譯
- CSS預編譯器CSS編譯
- VS設定 LLVM-Clang 編譯器進行編譯C++專案LVM編譯C++
- 記錄一次gcc的編譯GC編譯
- 一文搞懂C/C++常用編譯器C++編譯
- 在C,C++,java和python執行時直譯器和編譯器的區別C++JavaPython編譯
- GCC編譯和連結過程GC編譯
- C# 編譯器選項(Visual Studio配置)C#編譯
- 編譯原理——C++版桌面計算器編譯原理C++
- 源語言、目標語言、翻譯器、編譯器、直譯器編譯
- 【軟體開發底層知識修煉】五 gcc-C語言編譯器GCC語言編譯
- 說說 方舟編譯器編譯
- stylus(css預編譯器)CSS編譯
- ARM 之主流編譯器編譯
- Rust 編譯器入門Rust編譯
- 「譯」Liftoff:V8 引擎中全新的 WebAssembly baseline 編譯器Web編譯
- 記一次編譯GCC的經歷編譯GC
- C語言編譯器開發之旅(二):解析器C語言編譯
- C++編譯器認為的指標型別(靜態聯編)C++編譯指標型別
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯