# ==ubuntu 安裝 gcc ===
# 系統套件更新檢查
$sudo apt update && sudo apt upgrade
#透過 apt 裝 gcc
$sudo apt install gcc
#安装 build-essential
软件包,该软件包包含 GCC 及一系列开发工具,如 make、g++ 和dpkg-dev。
$sudo apt install build-essential
#要验证 GCC 编译器是否已成功安装,可以使用以下命令查看 GCC 版本
$gcc --version
#=== hello.c 編譯測試 gcc =====
$nano hello.c
#include <stdio.h>
int main(void){
printf("Hello, World!\n");
return 0;
}
# 編譯 C 程式
gcc hello.c
# 執行編譯好的程式
./a.out
# 執行編譯好的程式 ./a.out
Hello, world!
# 編譯 C 程式,指定輸出檔名 gcc -o hello hello.c # 執行編譯好的程式 ./hello只編譯不連結
GCC 預設會將 C 的原始碼編譯並連結,產生執行檔,若想讓編譯器只進行編譯、不要連結,可加上
-c
參數,這樣就會建立一個 object 檔:# 僅編譯、不連結,建立 obj 檔案 gcc -c hello.c執行這行之後,就會產生一個
hello.o
檔案,後續若要進行連結,就可以使用這個 object 檔:# 連結產生執行檔 gcc -o hello hello.o通常在大型的專案中,都會將編譯與連結兩個動作拆開,以下是一個典型的例子:
# 編譯個別 C 檔案 gcc -c a.c gcc -c b.c gcc -c c.c # 連結 gcc -o myapp a.o b.o c.o這樣作除了可讓程式碼方便管理之外,也可以加快編譯的速度,假設我們在開發過程中,更改了
b.c
的內容,在重新編譯時就只要編譯b.c
,然後即可進連結,省去重新編譯a.c
與c.c
的時間。最佳化
GCC 可以根據 CPU 的架構,進行最佳化處理,編譯出效能更好的執行檔,可用的選項有
-O
(跟-O1
相同)、-O2
與-O3
,數字越高代表最佳化的程度越高,許多專案在編譯正式版的時候,都會使用-O2
進行最佳化。# 進行最佳化 gcc -O2 -o hello hello.c標頭檔與函式庫路徑
在編譯程式時,編譯器需要許多標頭檔(
*.h
檔案)來編譯原始碼,而連結的時候則會需要一些函式庫(*.a
、*.so
等)才能進行連結,但是編譯器只會自動引入一些系統預設的檔案,在大型專案中開發者會需要指定許多額外的標頭檔與函式庫位置,這樣才能讓編譯器順利編譯與連結。編譯器會在 include 路徑中,搜尋 C 程式碼中以
#include
所引入的標頭檔,如果需要指定額外的搜尋路徑,可以使用-I
參數增加搜尋路徑,假設我們有一些標頭檔放在/home/gtwang/include
目錄下,而要新增這個路徑就可以這樣寫:# 新增標頭檔搜尋路徑 gcc -I/home/gtwang/include -o hello hello.c由於標頭檔的名稱都寫在 C 程式碼中,所以檔名都是已知的,只需要告訴編譯器路徑即可進行編譯。在連結時期所需要函式庫名稱與路徑,可以透過 GCC 的
-l
與-L
參數來指定。在 Linux 中假設有一個libsum.a
函式庫放在/home/gtwang/lib
目錄下,若要將其納入連結,則可以這樣寫:# 納入指定的函式庫 gcc -lsum -L/home/gtwang/lib -o hello hello.c
沒有留言:
張貼留言