Boost 是 C++ 準標準庫,Ubuntu 套件版本常較舊且預設未啟用 MPI。本文示範從原始碼編譯安裝 Boost,重點解決 MPI 支援缺失導致編譯錯誤的關鍵步驟。
lsb_release -a
# Ubuntu 22.04 LTS
gcc --version
# 11.4.0
sudo apt-get install libboost-all-dev
# 或特定版本
sudo apt-get install libboost1.74-dev
cd /usr/local/src
wget https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.bz2
tar xjf boost_1_83_0.tar.bz2
cd boost_1_83_0
./bootstrap.sh
# 產生 b2 建置工具與 project-config.jam
編輯 tools/build/src/user-config.jam (或 project-config.jam),於末尾新增:
using mpi ;
# 注意: mpi 後有空格再分號
若 MPI 編譯器非標準路徑:
using mpi : /usr/bin/mpic++ : /usr/bin/mpicxx : /usr/include/mpi /usr/lib/x86_64-linux-gnu/openmpi ;
# 完整編譯 (耗時 30-60 分鐘)
./b2 -j$(nproc) toolset=gcc variant=release link=shared,static threading=multi
# 僅編譯特定庫 (如 filesystem, system, thread, mpi)
./b2 -j$(nproc) --with-filesystem --with-system --with-thread --with-mpi
# 預設安裝至 /usr/local
sudo ./b2 install
# 自訂前綴
sudo ./b2 --prefix=/opt/boost/1.83 install
# 檢查標頭檔
ls /usr/local/include/boost/
# 檢查庫檔
ls /usr/local/lib/libboost_*
# 設定環境變數 (加入 ~/.bashrc 或 /etc/profile.d/boost.sh)
export BOOST_ROOT=/usr/local
export CPLUS_INCLUDE_PATH=$BOOST_ROOT/include:$CPLUS_INCLUDE_PATH
export LIBRARY_PATH=$BOOST_ROOT/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$BOOST_ROOT/lib:$LD_LIBRARY_PATH
# CMake 專案自動偵測
# find_package(Boost 1.83 REQUIRED COMPONENTS filesystem system thread mpi)
# 方法 1: ldconfig (推薦)
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/boost.conf
sudo ldconfig
# 方法 2: 複製至系統庫目錄 (不推薦)
sudo cp /usr/local/lib/libboost_*.so* /usr/lib/x86_64-linux-gnu/
/opt/boost/1.xx,專案用 BOOST_ROOT 指定update-alternatives 管理 /usr/local/include/boost 符號連結| 錯誤 | 原因 | 解決 |
|---|---|---|
mpi.h not found | 缺少 MPI 開發套件 | sudo apt install libopenmpi-dev |
b2: command not found | 未執行 bootstrap.sh | 重新執行 ./bootstrap.sh |
| 記憶體不足 | 並行編譯佔用過大 | ./b2 -j2 限制並行數 |
| C++ 標準不符 | 舊 Boost 需 C++11/14 | cxxflags="-std=c++14" |
原始碼編譯 Boost 雖耗時,但能精確控制功能模組、C++ 標準、指令集最佳化 (native) 與 MPI 支援,是高效能 C++ 專案部署的標準作法。