Ubuntu下编译适配AMD GCN的Clang/LLVM遇头文件缺失问题求助
解决编译适配AMD GCN的LLVM/Clang时HIP程序头文件缺失问题
问题根源分析
你遇到的一系列头文件错误(hip/hip_runtime.h、<thread>、__config_site)本质是两个核心问题:
- 手动指定主机头路径导致依赖混乱,针对
amdgcn-amd-amdhsa目标的编译需要使用适配该GPU架构的libcxx,而非主机系统的标准库。 - 初始LLVM编译配置未正确生成针对AMDGPU目标的libcxx头文件与库,导致编译HIP程序时无法找到对应架构的依赖。
修复步骤
1. 重新配置LLVM编译参数
确保libcxx/libcxxabi针对amdgcn-amd-amdhsa目标编译,并指定安装路径方便后续引用:
cmake -S llvm-project/llvm -B llvm-project/build \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_PROJECTS="clang;lld" \ -DCMAKE_CXX_COMPILER=g++ \ -DCMAKE_C_COMPILER=gcc \ -G "Unix Makefiles" \ -DLLVM_TARGETS_TO_BUILD="AMDGPU" \ -DLLVM_RUNTIME_TARGETS="amdgcn-amd-amdhsa" \ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \ -DLIBCXX_TARGET_TRIPLE=amdgcn-amd-amdhsa \ -DLIBCXXABI_TARGET_TRIPLE=amdgcn-amd-amdhsa \ -DCMAKE_INSTALL_PREFIX=/path/to/your/llvm-install
替换
/path/to/your/llvm-install为你想安装LLVM的自定义路径,比如~/llvm-amdgcn。
2. 编译并安装LLVM与libcxx
用多线程加速编译,完成后安装到指定路径:
cmake --build llvm-project/build --target install -j$(nproc)
3. 正确编译HIP程序
使用你编译好的clang,指定目标三元组,同时关联ROCm的HIP组件与适配AMDGPU的libcxx:
/path/to/your/llvm-install/bin/clang++ \ --target=amdgcn-amd-amdhsa \ --sysroot=/opt/rocm/llvm/lib/clang/$(/path/to/your/llvm-install/bin/clang --version | grep version | awk '{print $3}')/lib/linux/amdgcn-amd-amdhsa \ -I/opt/rocm/include \ -L/opt/rocm/lib \ -L/path/to/your/llvm-install/lib \ -o add add.cpp \ -lamdhip64
如果你的ROCm安装路径不是
/opt/rocm,请对应修改所有相关路径。
关键说明
- 不要手动添加主机系统的
include/c++/v1路径:针对AMDGPU目标的编译必须使用专门编译的libcxx,主机标准库无法适配GPU架构。 __config_site是libcxx编译时生成的架构专属配置文件,只有完成LLVM与libcxx的安装后,才能在指定的安装路径中找到它。- 确保你的主机gcc/g++版本不低于10.0,满足LLVM 16的编译要求。
内容的提问来源于stack exchange,提问作者The Noderinator
相关产品推荐
相关产品推荐

