ARM架构Mac使用Boost Thread编译出现arm64未定义符号错误
问题根因
你遇到的arm64架构下Boost Thread符号未定义报错,核心原因是本地安装的Boost 1.76.0库仅编译了x86_64架构版本,未生成ARM64架构的二进制文件,链接阶段无法匹配Apple Silicon芯片的架构要求。
验证方法
执行以下命令确认现有Boost Thread库的架构支持:lipo -info /你的Boost库路径/libboost_thread-mt.a
若输出仅包含x86_64,即可确认是架构适配问题。
解决方案
方案1:重新编译适配ARM64的Boost库
- 下载Boost 1.76.0源码包并解压,进入源码根目录
- 执行编译配置命令:
./bootstrap.sh --prefix=自定义安装路径 - 打开生成的
project-config.jam文件,添加如下配置指定clang编译参数:using clang : : /usr/bin/clang++ : <cxxflags>"-arch arm64" <linkflags>"-arch arm64" ; - 执行编译安装命令:
./b2 install - 打开Xcode项目的Build Settings配置:
- 确认Architectures配置已包含arm64,未设置排除arm64的规则
- 修改Library Search Paths,优先指向新编译的ARM版Boost的lib目录
- 确认Other Linker Flags已添加
-lboost_thread-mt、-lboost_system-mt配置
方案2:替换为C++标准库线程(无需修改Boost配置)
你的代码已经引入了<thread>头文件,直接将boost::thread t(boost::bind(session, sock));替换为注释掉的std::thread t(boost::bind(session, sock));即可,C++11及以上版本的std::thread原生适配arm64架构,无需额外链接第三方线程库,可直接解决编译报错。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

