如何在Ubuntu x86_64上正确构建并链接libunwind库
解决libunwind静态库链接时lzma函数未定义引用问题
你遇到的链接错误是因为libunwind默认启用了minidebuginfo功能,该功能依赖lzma库,而静态链接时不会自动递归引入依赖库,导致lzma相关函数找不到。以下是两种可行的解决办法:
方法一:编译libunwind时禁用lzma依赖
如果不需要minidebuginfo功能,直接在编译libunwind时关闭该选项即可:
- 回到libunwind源码目录,清理之前的编译产物:
make clean && rm -rf build - 重新执行configure,添加禁用参数:
./configure --prefix=$(pwd)/build --disable-minidebuginfo - 重新编译安装:
make && make install - 用新生成的静态库重新链接你的项目,此时不再需要依赖lzma,链接命令保持原来的即可。
方法二:链接项目时显式引入lzma库
如果需要保留minidebuginfo功能,需要在链接时手动加入lzma库:
- 先确保系统已安装lzma开发库(Ubuntu下执行:
sudo apt-get install liblzma-dev) - 修改编译链接命令,在末尾加上
-llzma:g++ -O0 main.cpp -L/home/.../libunwindExample -lunwind -llzma - 若链接仍有问题,可以直接指定静态库的绝对路径,避免链接器查找错误:
g++ -O0 main.cpp /home/.../libunwindExample/libunwind.a /usr/lib/x86_64-linux-gnu/liblzma.a
ARM架构下的适配
ARM平台出现同样问题时,解决方案完全一致:要么编译libunwind时加--disable-minidebuginfo,要么链接项目时添加-llzma(ARM平台的lzma库路径可能不同,可通过find /usr/lib -name liblzma.a查找)。
另外,确认你的项目中已正确定义UNW_LOCAL_ONLY,该宏会减少libunwind的依赖范围,避免不必要的链接问题。
内容的提问来源于stack exchange,提问作者DSKY
相关产品推荐
相关产品推荐

