Boost 是 C++ 準標準庫,Ubuntu 套件 libboost-dev 版本較舊且預設未啟用 MPI。專案若需 MPI、特定版本或最新特性,建議從源碼編譯。本文以 Boost 1.53 為例,詳述編譯安裝全流程與關鍵避坑點。
wget https://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.tar.gz
tar xzf boost_1_53_0.tar.gz
cd boost_1_53_0
./bootstrap.sh
# 編輯 tools/build/v2/user-config.jam
# 在檔案末尾新增:
using mpi ;
mpi 後必須有空格再接分號 using mpi ;,否則 b2 解析失敗。此步驟決定編譯出的庫是否包含 boost::mpi 模組。
./b2 -j4
sudo ./b2 install
# 或指定前綴
sudo ./b2 install --prefix=/opt/boost-1.53
# 預設路徑
ls /usr/local/include/boost/ # 標頭檔
ls /usr/local/lib/libboost_* # 庫檔案
# 測試 MPI 程式編譯
mpic++ test_mpi.cpp -I/usr/local/include -L/usr/local/lib -lboost_mpi -lboost_serialization -o test_mpi
| 問題 | 原因 | 解決 |
|---|---|---|
| 執行時找不到 libboost_xxx.so | 動態連結器搜尋路徑無 /usr/local/lib | echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/boost.conf && sudo ldconfig 或複製庫檔至 /usr/lib |
| 編譯錯誤:mpi.hpp 找不到 | 未在 user-config.jam 啟用 mpi | 確認 using mpi ; 正確,重新 ./b2 |
| 版本衝突:系統已有 libboost-dev | apt 安裝版本與手動編譯版本共存 | 編譯時指定 --prefix 隔離,或移除系統套件 |
| b2 編譯極慢 | 單執行緒預設 | 加 -j$(nproc) 並行編譯 |
# 僅編譯特定庫 (加快速度)
./b2 --with-thread --with-filesystem --with-system --with-mpi
# 靜態連結
./b2 link=static
# 釋出版本 (優化、無除錯符號)
./b2 variant=release
# 完整範例
./b2 -j4 variant=release link=static threading=multi --with-mpi --with-thread --with-filesystem
若不需 MPI 或特定版本,Ubuntu 20.04+ 可直接:
sudo apt-get install libboost-all-dev libboost-mpi-dev libboost-mpi-python-dev
但版本受限於發行版凍結,生產環境建議仍以源碼編譯掌控版本與功能模組。
掌握 Boost 編譯安裝流程,特別是 user-config.jam 的 MPI 啟用技巧,能確保 C++ 專案獲得所需的高效能、跨平台庫支援。