在x86 Ubuntu 22.04.2上交叉编译TVM至RISC-V报错求助
解决交叉编译TVM到RISC-V时LLVM库格式错误的问题
错误根源
你遇到的链接错误是因为当前使用的libLLVM-14.so是x86_64架构的库,而RISC-V交叉链接器无法处理非RISC-V格式的二进制文件。通过apt install llvm安装的LLVM是针对本地x86系统编译的,并非适配RISC-V目标的版本,因此交叉编译TVM时不能直接使用它。
解决步骤
1. 获取RISC-V目标的LLVM
你需要编译或下载适配RISC-V架构的LLVM(推荐和当前版本匹配的14.x系列):
编译RISC-V LLVM(推荐)
在x86 Ubuntu上编译支持RISC-V目标的LLVM:
# 安装编译依赖 sudo apt install build-essential cmake ninja-build git libssl-dev # 克隆LLVM 14.x源码 git clone --branch llvmorg-14.0.6 https://github.com/llvm/llvm-project.git cd llvm-project mkdir build && cd build # 配置CMake,指定RISC-V为目标架构 cmake ../llvm \ -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGETS_TO_BUILD=RISCV \ -DLLVM_ENABLE_PROJECTS=clang \ -DCMAKE_INSTALL_PREFIX=/opt/riscv-llvm-14 # 编译并安装 ninja -j$(nproc) sudo ninja install
或使用预编译包
如果不想自行编译,可以从可信源下载RISC-V预编译LLVM包,解压后记录安装路径即可。
2. 调整TVM的CMake编译参数
修改交叉编译命令,指定RISC-V版本LLVM的路径,确保CMake识别到正确的库:
# 先删除旧build目录(如果之前运行过CMake) rm -rf build && mkdir build && cd build cmake .. \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_VERSION=1 \ -DCMAKE_C_COMPILER=/usr/bin/riscv64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=/usr/bin/riscv64-linux-gnu-g++ \ -DCMAKE_FIND_ROOT_PATH=/usr/riscv64-linux-gnu \ -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \ -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ -DMACHINE_NAME=riscv64-linux-gnu \ -DLLVM_DIR=/opt/riscv-llvm-14/lib/cmake/llvm \ # 替换为你的RISC-V LLVM实际路径 -DUSE_LLVM=ON make -j$(nproc)
3. 验证LLVM架构
可以通过以下命令确认LLVM库的架构是否正确:
file /opt/riscv-llvm-14/lib/libLLVM-14.so
输出应包含ELF 64-bit LSB shared object, UCB RISC-V字样,说明是RISC-V格式的库。
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

