Manjaro安装boost后编译boost::thread程序报错的原因及解决方法
错误产生原因
该链接报错的根本原因是编译时未显式链接boost_thread功能模块库。Manjaro官方源提供的boost安装包将不同功能的实现拆分到了独立的动态库文件中,boost::thread相关的类与函数实现没有包含在基础依赖库内,也不会被编译器默认链接,因此链接阶段找不到对应符号实现,最终触发重定位、PIE相关的报错。
修复方案
- 普通gcc/clang编译场景,直接在编译命令末尾添加
-lboost_thread参数即可,示例命令如下:g++ 你的源码文件名.cpp -o 生成的可执行文件名 -lboost_thread
如果代码还用到了boost的system、chrono等其他依赖模块,也可按需补充链接参数,例如:g++ 你的源码文件名.cpp -o 生成的可执行文件名 -lboost_thread -lboost_system -lboost_chrono - CMake项目管理场景,在CMakeLists.txt中显式指定查找boost thread模块并链接即可,示例配置片段:
find_package(Boost REQUIRED COMPONENTS thread) include_directories(${Boost_INCLUDE_DIRS}) add_executable(你的可执行文件名 你的源码文件.cpp) target_link_libraries(你的可执行文件名 ${Boost_LIBRARIES})
- 如果你需要静态链接boost库,先安装boost静态库包:
pacman -S boost-static,之后在编译命令中添加-static参数即可。
内容的提问来源于stack exchange,提问作者wwwazz
相关产品推荐
相关产品推荐

