RedHat7.9构建LLVM 18.1.2工具与Runtime的问题咨询
构建LLVM 18.1.2工具链常见问题解决
环境说明
- LLVM版本:git标签
llvmorg-18.1.2 - 系统:RedHat 7.9 amd64
- 编译器:自行编译的GCC 13.1(编译无异常)
初始疑问:能否同时构建LLVM工具与Runtime?
可以一次性构建,无需分开两个脚本。在LLVM主源码的CMake配置中,同时指定LLVM_ENABLE_PROJECTS和LLVM_ENABLE_RUNTIMES参数即可,CMake会自动处理依赖并按顺序构建。示例配置:
export CC=`which gcc` export CXX=`which g++` cmake \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_RTTI=ON \ -D LLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb;polly;pstl" \ -D LLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \ -D CMAKE_INSTALL_PREFIX=/home/user/tools/clang \ -D CMAKE_CXX_LINK_FLAGS="-Wl,-rpath,/path/to/gcc-13.1.0/lib64 -L/path/to/gcc-13.1.0/lib64" \ -B build_all \ -S llvm
注:若用GCC一次性构建,Runtime部分可能仍出现兼容性问题,建议先单独用GCC构建Clang工具链,再用Clang构建Runtime。
遇到的问题及解决
问题1:构建Runtime时出现gcc: error: unrecognized command-line option '-nostdlib++'
- 原因:构建libunwind这类C++ runtime库时,CMake会自动传递C++专属编译选项,但配置时仅通过环境变量指定Clang可能失效,部分目标调用了系统默认的GCC 4.8.5,而GCC的C编译器不识别
-nostdlib++。此外,LLVM官方推荐用Clang构建Runtime组件,部分特性依赖Clang支持。 - 解决:在Runtime的CMake命令中显式指定编译器,强制所有环节使用Clang/Clang++:
cmake \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_RTTI=ON \ -D CMAKE_INSTALL_PREFIX=/home/user/tools/clang \ -D LLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \ -D CMAKE_C_COMPILER=/path/to/clang \ -D CMAKE_CXX_COMPILER=/path/to/clang++ \ -B build_runtimes \ -S runtimes
问题2:构建工具时链接liblldb.so出现file in wrong format错误
- 原因:系统
/usr/local/lib/libpanel.so为32位x86格式,与amd64编译环境不兼容。 - 解决:
- 优先安装64位
libpanel-devel包(RedHat 7下属于ncurses-devel子包),替换错误的32位库; - 若无法替换,在LLVM工具的CMake配置中指定正确的64位库路径:
- 优先安装64位
cmake \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_RTTI=ON \ -D LLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;lldb;polly;pstl" \ -D CMAKE_INSTALL_PREFIX=/home/user/tools/clang \ -D CMAKE_CXX_LINK_FLAGS="-Wl,-rpath,/path/to/gcc-13.1.0/lib64 -L/path/to/gcc-13.1.0/lib64" \ -D CMAKE_LIBRARY_PATH=/usr/lib64 \ -B build \ -S llvm
问题3:用Clang构建compiler-rt时出现C++标准库特性缺失错误
- 原因:编译时调用了系统默认GCC 4.8.5的C头文件,而GCC 4.8.5仅支持部分C11特性,
std::make_unique(C14)和std::remove_reference_t(C14)均为C++14新增特性,导致编译失败。 - 解决:强制Clang使用GCC 13.1的C标准库,并指定C14编译标准:
cmake \ -D CMAKE_BUILD_TYPE=Release \ -D LLVM_ENABLE_RTTI=ON \ -D CMAKE_INSTALL_PREFIX=/home/user/tools/clang \ -D LLVM_ENABLE_RUNTIMES="compiler-rt;libcxx;libcxxabi;libunwind" \ -D CMAKE_C_COMPILER=/path/to/clang \ -D CMAKE_CXX_COMPILER=/path/to/clang++ \ -D CMAKE_CXX_STANDARD=14 \ -D CMAKE_CXX_STANDARD_REQUIRED=ON \ -D CMAKE_CXX_FLAGS="-stdlib=libstdc++ -I/path/to/gcc-13.1.0/include/c++/13.1.0 -I/path/to/gcc-13.1.0/include/c++/13.1.0/x86_64-pc-linux-gnu" \ -D CMAKE_C_FLAGS="-I/path/to/gcc-13.1.0/include" \ -D CMAKE_EXE_LINKER_FLAGS="-L/path/to/gcc-13.1.0/lib64 -Wl,-rpath,/path/to/gcc-13.1.0/lib64" \ -B build_runtimes \ -S runtimes
内容的提问来源于stack exchange,提问作者Paul Floyd
相关产品推荐
相关产品推荐

