Mac OS M1芯片编译Boost 1.65.1遇阻,求解决方案
适配ARM64 macOS编译Boost 1.65.1的可行方案
Boost 1.65.1属于旧版本,原生没有适配ARM64架构的MacOS,以下两种方案可以解决你遇到的编译问题:
方案一:基于系统Clang工具集修复编译(推荐)
系统默认Clang对ARM64 macOS的适配性最好,只需针对性修复Boost源码的兼容性问题:
预处理源码
下载Boost 1.65.1源码包并解压,进入源码根目录。修复Bootstrap的Clang警告报错
- 编辑
bootstrap.sh,找到编译bjam的compile函数,在编译命令中添加-Wno-error参数屏蔽警告转错误的问题。比如将原编译行:
修改为:"$CXX" -o "$BJAM" $BJAM_CXXFLAGS $BJAM_SRC"$CXX" -o "$BJAM" $BJAM_CXXFLAGS -Wno-error $BJAM_SRC - 编辑
boost/config/compiler/clang.hpp,添加ARM64架构的适配定义:
在文件中找到#if defined(__arm__)的代码块,下方添加:#elif defined(__aarch64__) # define BOOST_HAS_STDINT_H # define BOOST_HAS_INT128 # define BOOST_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__)
- 编辑
执行Bootstrap初始化
./bootstrap.sh --with-toolset=clang配置并执行编译安装
- 在源码根目录创建
user-config.jam文件,写入:using clang : : clang++ : <cxxflags>"-arch arm64 -stdlib=libc++" <linkflags>"-arch arm64 -stdlib=libc++" ; - 执行编译安装(可根据需求调整
variant、link、--prefix参数):./b2 toolset=clang architecture=arm address-model=64 variant=release link=shared,static threading=multi --prefix=/usr/local/boost-1.65.1 install
- 在源码根目录创建
方案二:解决GCC工具集下b2段错误问题
若坚持使用GCC,需确保GCC适配ARM64,同时修复b2的兼容性:
安装ARM64版GCC
使用Homebrew安装适配ARM64的GCC(需确保Homebrew是ARM64版本,非Rosetta转译):brew install gcc验证版本:
gcc --version,推荐使用12及以上版本。重新编译b2(解决段错误)
Boost 1.65.1的b2原生在ARM64下存在兼容性问题,用Clang重新编译bjam替代生成的b2:cd tools/build/src/engine clang++ -arch arm64 -o bjam *.cpp cp bjam ../../../../b2 cd ../../../..配置GCC工具集
编辑project-config.jam,修改GCC工具集定义:using gcc : : g++-13 : # 替换为你安装的GCC版本,比如g++-12 <cxxflags>"-arch arm64" <linkflags>"-arch arm64" ;执行编译安装
./b2 toolset=gcc architecture=arm address-model=64 variant=release link=shared,static threading=multi --prefix=/usr/local/boost-1.65.1 install
通用注意事项
- 全程使用ARM64原生终端(默认终端即可,不要用Rosetta转译的终端),避免架构混淆。
- 每次尝试新方案前,执行
./b2 clean清理残留编译产物。 - 若项目仅依赖部分Boost库,可在b2命令后添加
--with-<库名>指定编译,减少编译时间(比如--with-filesystem --with-thread)。
内容的提问来源于stack exchange,提问作者charles_r
相关产品推荐
相关产品推荐

