HOWTO · C++
使用 GCC 編譯 C++ 程式
本文討論了一種使用 gcc 編譯器編譯 C++ 程式的方法。
本頁內容
若要使用 GCC 編譯並執行 C++ 原始碼檔,請使用 g++ 編譯器驅動程式:執行 g++ -o hello hello.cpp,再於 Linux 或 macOS 執行 ./hello。GCC 是 GNU 編譯器合集;對一般程式而言,g++ 會選用 C++ 建置方式,並連結 C++ 標準函式庫。下文將說明如何確認編譯器是否可用、撰寫第一個程式、看懂常見診斷訊息,以及建置包含多個檔案的小型程式。
認識 GCC 及其重要性
GCC 是一套編譯器合集,包含多種語言的編譯器驅動程式。使用 C++ 時,通常選擇 g++ 最簡單。建置過程會將原始碼編譯,並把產生的目的碼與所需函式庫連結成可執行檔。一條建置指令就能完成這兩個階段;較大型的專案則可能先分別編譯各個檔案,再進行連結。
gcc 驅動程式可以編譯 C++ 原始碼,但它不像 g++ 那樣會自動連結 C++ 標準函式庫。在 GNU/Linux 工具鏈上,可以搭配 -lstdc++ 明確要求連結該函式庫;不過函式庫的順序和平台細節可能有所影響,因此一般 C++ 建置建議使用 g++。C++ 原始碼常使用 .cpp 或 .cc 副檔名;在區分大小寫的系統上,GCC 也會將大寫的 .C 副檔名視為 C++ 原始碼。
安裝 GCC
先在終端機執行 g++ --version,確認是否已安裝 C++ 編譯器。若找到編譯器,這個指令會顯示其版本。若無法使用此指令,請透過作業系統的套件管理工具,或該系統建議的工具鏈供應者安裝 C++ 工具鏈。套件名稱和安裝步驟因系統而異;Ubuntu 和部分相關發行版的 build-essential 套件包含 GCC 與其他建置工具。在 Windows 上,可以安裝 MinGW-w64 等 GCC 工具鏈,並將其 bin 目錄加入 PATH,也可以使用其他受支援的 C++ 工具鏈。請依照所用發行版或工具鏈的現行指示操作,不要依賴舊範例中的版本號碼。
撰寫第一個 C++ 程式
在工作目錄中建立名為 hello.cpp 的檔案。這個程式會將一行文字寫入標準輸出:
執行此範例:
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Hello, World!
#include <iostream> 提供 std::cout 使用的串流宣告。main 函式是程式的進入點,而 \n 會在輸出的文字後換行。
編譯 C++ 程式
在包含 hello.cpp 的目錄中,執行 g++ -o hello hello.cpp 來編譯程式並命名可執行檔。-o 選項用來指定輸出名稱;若未指定,GCC 在許多類 Unix 系統上會使用 a.out 等預設名稱。產生的檔案是可執行檔,而非目的檔。在 Linux 或 macOS 上,執行 ./hello 即可。在 Windows 命令提示字元中,通常可在目前目錄執行 hello.exe;實際指令取決於使用的殼層和工具鏈。
另一種適用於 GNU/Linux 的做法是執行 gcc -o hello hello.cpp -lstdc++,明確要求連結 C++ 標準函式庫。若建置系統要求使用 gcc 驅動程式,這個做法可能派得上用場;但對一般 C++ 程式而言,使用 g++ 較合適,因為它會自動選用適當的 C++ 連結方式。
除錯編譯錯誤
從左到右閱讀診斷訊息:它會指出原始碼檔案和行號,接著描述問題。例如,若程式使用 cout,卻未包含 <iostream>,也未將其限定為 std::cout,診斷訊息可能會指出 cout 未宣告。加入缺少的標頭檔,並改用 std::cout,然後重新建置。訊息的確切文字和行號會因編譯器版本與原始碼配置而異。
你可以使用 g++ -Wall -o hello hello.cpp,要求 GCC 啟用常見警告。-Wall 是實用的起點,但不會啟用 GCC 提供的所有警告。警告是診斷訊息,可能指出可疑的程式碼;請檢視警告,再判斷是否需要修改程式碼或建置選項。
連結多個檔案
程式可以在一個原始碼檔中定義函式,再從另一個檔案呼叫它。例如,main.cpp 可以包含 <iostream>、宣告 int add(int, int);,並定義 int main() { std::cout << add(2, 3) << '\n'; }。在 functions.cpp 中,定義 int add(int a, int b) { return a + b; }。相符的函式宣告與定義可讓編譯器檢查呼叫是否正確,並讓連結器將呼叫連接到實作。
使用一條指令建置這兩個原始碼檔:g++ -o my_program main.cpp functions.cpp。這會分別編譯各個原始碼檔,並將它們連結成可執行檔 my_program。在 Linux 或 macOS 上執行 ./my_program;此範例會輸出 5。在 Windows 上,請使用殼層支援的指令執行產生的 my_program.exe。
結論
一般使用 GCC 建置 C++ 程式時,請執行 g++ -o program source.cpp,再執行該指令產生的可執行檔。gcc 驅動程式也能編譯 C++,但 GNU/Linux 建置可能需要明確加入 -lstdc++。一般情況下,選用 g++ 就不必額外指定這個函式庫。
常見問題
- GCC 是什麼? GCC 是 GNU 編譯器合集,提供 C++、C 及其他語言的編譯器驅動程式。
- 如何確認是否已安裝 GCC? 執行
g++ --version檢查 C++ 驅動程式,或執行gcc --version檢查 C 驅動程式。 - 為什麼編譯 C++ 時要用
g++而不是gcc?g++會自動選用 C++ 連結方式,包括一般程式所需的標準函式庫。使用gcc時,GNU/Linux 建置可能需要明確加入-lstdc++。 - 能否用一條指令編譯多個 C++ 檔案? 可以。在
g++指令中列出每個原始碼檔,例如g++ -o my_program main.cpp functions.cpp。 -o有什麼作用? 它用來指定輸出檔案名稱;對g++ -o hello hello.cpp這類完整建置指令而言,輸出檔是可執行檔。