编译LLVM master分支(16版本)时libunwind报错求助
解决Ubuntu 22.04编译LLVM master分支时的libunwind错误
你遇到的错误信息:
CMake Error at /home/hxf0223/tmp/llvm-project/libunwind/src/CMakeLists.txt:109 (message):
Compiler doesn't support generation of unwind tables if exception support
is disabled. Building libunwind DSO with runtime dependency on C++ ABI
library is not supported.
你的编译命令:
CC=clang CXX=clang++ cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;libclc;lld;lldb;mlir;polly;pstl" -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON -DLIBCXXABI_USE_COMPILER_RT=ON -DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXX_USE_COMPILER_RT=ON -DLIBUNWIND_USE_COMPILER_RT=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_RUNTIMES=all ../llvm
可行的修复方案
在编译参数中添加-DLIBUNWIND_ENABLE_SHARED=OFF,强制构建静态版本的libunwind,避免动态库模式下的C++ ABI依赖冲突。修改后的完整命令:
CC=clang CXX=clang++ cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;libclc;lld;lldb;mlir;polly;pstl" -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON -DLIBCXXABI_USE_COMPILER_RT=ON -DLIBCXXABI_USE_LLVM_UNWINDER=ON -DLIBCXX_USE_COMPILER_RT=ON -DLIBUNWIND_USE_COMPILER_RT=ON -DLLVM_ENABLE_EH=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_RUNTIMES=all -DLIBUNWIND_ENABLE_SHARED=OFF ../llvm
另一个可选方案是添加-DLIBUNWIND_ENABLE_EH=ON,明确强制libunwind构建时启用异常支持,但静态库方案通常能更直接解决依赖冲突问题。
原因说明
错误的核心是:构建libunwind动态库(DSO)时,当前环境下编译器无法在异常支持未正确配置的场景生成 unwind 表,且动态库对C++ ABI库的依赖模式不被支持。切换到静态库构建后,既绕开了动态库的ABI依赖问题,也满足了unwind表生成的条件。
我近期编译LLVM master分支时,通过上述参数调整成功完成了构建,你可以尝试这个方案。
内容的提问来源于stack exchange,提问作者roderick
相关产品推荐
相关产品推荐

