Ubuntu 13.04 預裝 GCC 4.7,但 C++11 支持不完整(如 `
# 1. 添加官方工具鏈 PPA
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
# 2. 更新軟件源
sudo apt-get update
# 3. 安裝 GCC 4.8 及 G++ 4.8
sudo apt-get install gcc-4.8 g++-4.8
不推薦手動 `rm /usr/bin/g++ && ln -s ...`,會破壞包管理一致性。應用系統工具:
# 註冊優先級(數字越大優先級越高)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 60
# 交互式切換(可隨時切回舊版)
sudo update-alternatives --config gcc
sudo update-alternatives --config g++
$ g++ --version
g++ (Ubuntu 4.8.1-2ubuntu1~13.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ g++ -std=c++11 -x c++ - <<<'#include int main() { std::regex r("\\d+"); return 0; }' && echo "C++11 regex OK"
C++11 regex OK
| 問題 | 原因 | 解決 |
|---|---|---|
編譯報錯 unrecognized command line option "-std=c++11" | 仍在調用舊版 g++ | 執行 `update-alternatives --config g++` 選擇 4.8 |
鏈接錯誤 undefined reference to `std::thread::join()` | 未鏈接 pthread | 編譯加 `-pthread`:`g++ -std=c++11 -pthread main.cpp` |
| 多版本共存混亂 | 手動修改鏈接 | 純用 `update-alternatives` 管理 |
| 內核模塊編譯失敗 | 內核要求特定 GCC 版本 | 內核編譯時顯式指定 `CC=gcc-4.7` |
若需更高版本,建議用 **源碼編譯** 或 **Docker 隔離環境**,避免污染系統工具鏈:
# 源碼編譯示例(GCC 11)
wget https://ftp.gnu.org/gnu/gcc/gcc-11.4.0/gcc-11.4.0.tar.gz
tar xf gcc-11.4.0.tar.gz
cd gcc-11.4.0
./contrib/download_prerequisites
mkdir build && cd build
../configure --prefix=/opt/gcc-11 --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install
# 使用時顯式指定路徑
/opt/gcc-11/bin/g++ -std=c++20 main.cpp
最佳實踐總結: 系統級工具鏈升級用 PPA + `update-alternatives`;專項需求用 Docker/源碼安裝到 `/opt`;新專案優先考慮 Clang + CMake + vcpkg/Conan 現代化工具鏈。