萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 編譯安裝 Boost C++ 庫完整指南:啟用 MPI、自訂路徑、版本管理與除錯

Boost 是 C++ 準標準庫,Ubuntu 套件版本常較舊且預設未啟用 MPI。本文示範從原始碼編譯安裝 Boost,重點解決 MPI 支援缺失導致編譯錯誤的關鍵步驟。

環境確認

lsb_release -a
# Ubuntu 22.04 LTS
gcc --version
# 11.4.0

快速安裝 (不需 MPI 時)

sudo apt-get install libboost-all-dev
# 或特定版本
sudo apt-get install libboost1.74-dev

原始碼編譯安裝 (需 MPI/自訂版本/最佳化)

1. 下載原始碼

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

2. Bootstrap 建置系統

./bootstrap.sh
# 產生 b2 建置工具與 project-config.jam

3. 關鍵步驟:啟用 MPI 支援

編輯 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 ;

4. 編譯 (可指定工具鏈/最佳化)

# 完整編譯 (耗時 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

5. 安裝

# 預設安裝至 /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/

Boost 編譯安裝示意

版本管理策略

  • 多版本共存:安裝至 /opt/boost/1.xx,專案用 BOOST_ROOT 指定
  • 使用 update-alternatives 管理 /usr/local/include/boost 符號連結
  • 容器化建構:Dockerfile 中編譯安裝特定版本

常見編譯錯誤對策

錯誤原因解決
mpi.h not found缺少 MPI 開發套件sudo apt install libopenmpi-dev
b2: command not found未執行 bootstrap.sh重新執行 ./bootstrap.sh
記憶體不足並行編譯佔用過大./b2 -j2 限制並行數
C++ 標準不符舊 Boost 需 C++11/14cxxflags="-std=c++14"

原始碼編譯 Boost 雖耗時,但能精確控制功能模組、C++ 標準、指令集最佳化 (native) 與 MPI 支援,是高效能 C++ 專案部署的標準作法。

copyright © 萬盛學電腦網 all rights reserved