项目链接libunwind库时出现未定义引用链接错误求助
解决链接错误:undefined reference to
_Ux86_64_step 和 _Ux86_64_init_local 嘿,你碰到的这个链接问题我之前也遇到过,本质是libXYZMaster.so依赖的libunwind x86_64架构专属符号没被正确找到。下面给你几个切实可行的解决方向,按顺序试试:
1. 调整链接库的顺序
链接器是从左到右处理依赖关系的——如果A库依赖B库,那B库必须放在A库的后面。你当前的命令里libXYZMaster.so在-lunwind前面,这就导致链接器先处理libXYZMaster.so时找不到需要的符号,后面才加载的libunwind也没法补这个缺口。
把-lunwind移到libXYZMaster.so之后试试,修改后的命令:
/usr/bin/c++ CMakeFiles/XYZ.dir/test/XYZ.cpp.o CMakeFiles/XYZ.dir/test/TempDir.cpp.o -o XYZ libXYZMaster.so -lboost_filesystem -lboost_system /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so -lboost_random -lboost_iostreams -lboost_thread -ldw -Wl,-rpath,/home/user885/untitled/build -lunwind
2. 添加x86_64专属的libunwind库
有些Linux发行版里,x86_64架构的特定unwind符号单独打包在libunwind-x86_64.so里,所以你需要额外加-lunwind-x86_64到链接命令里,放在-lunwind后面就行:
/usr/bin/c++ CMakeFiles/XYZ.dir/test/XYZ.cpp.o CMakeFiles/XYZ.dir/test/TempDir.cpp.o -o XYZ libXYZMaster.so -lboost_filesystem -lboost_system /usr/lib/x86_64-linux-gnu/libboost_unit_test_framework.so -lboost_random -lboost_iostreams -lboost_thread -ldw -Wl,-rpath,/home/user885/untitled/build -lunwind -lunwind-x86_64
3. 确认libunwind开发包装全了
如果上面俩方法都不行,大概率是你系统里缺了完整的libunwind开发文件。不同发行版安装命令不一样:
- Debian/Ubuntu系:
sudo apt-get install libunwind-dev - RHEL/CentOS系:
sudo yum install libunwind-devel
装完之后重新跑链接命令试试。
4. 用CMake自动处理依赖(更推荐)
既然你本来就是用CMake构建的,不如直接在CMakeLists.txt里配置,让它自动处理库的顺序和路径,省得手动写命令踩坑。可以这么加:
find_package(Unwind REQUIRED) target_link_libraries(XYZ PRIVATE libXYZMaster.so Boost::filesystem Boost::system Boost::unit_test_framework Boost::random Boost::iostreams Boost::thread dw ${Unwind_LIBRARIES})
这样CMake会帮你搞定所有依赖顺序的问题,比手动调命令靠谱多了。
内容的提问来源于stack exchange,提问作者user855
相关产品推荐
相关产品推荐

