使用Clang从x86_64交叉编译GNU which到ARM失败求助
解决Clang交叉编译GNU which至ARM架构失败的问题
问题根源分析
你的configure命令存在三个关键错误:
-target参数未正确传递给Clang:你把-target arm-linux-gnueabi作为configure的独立参数,而非Clang的命令参数,导致configure并未让Clang知晓目标架构。- 缺失
--host参数:configure需要--host来明确目标运行环境,否则会默认使用当前主机(x86_64)的配置生成Makefile。 - LD变量设置错误:
LLVMgold.so是链接器插件,不是可执行链接器程序,直接设置LD为该文件会导致链接阶段无法正确调用ARM架构的链接逻辑。
正确操作步骤
先清理旧编译产物避免干扰:
make clean && rm -rf config.log config.status
然后执行以下configure命令(注意参数格式):
./configure --host=arm-linux-gnueabi \ CC="/home/anon/Documents/llvm/llvm-project/build/bin/clang -target arm-linux-gnueabi" \ RANLIB=/home/anon/Documents/llvm/llvm-project/build/bin/llvm-ranlib \ LDFLAGS="-fuse-ld=gold"
参数说明
--host=arm-linux-gnueabi:告知configure目标程序将运行在ARM架构的gnueabi环境下,触发交叉编译配置逻辑。CC="clang -target...":用引号将编译器及其参数包裹,确保configure调用Clang时自动带上目标架构参数,强制生成ARM代码。LDFLAGS="-fuse-ld=gold":告诉Clang使用gold链接器,无需单独设置LD变量(Clang会自动匹配对应架构的gold链接器)。
验证结果
编译完成后再次执行:
file which
输出应显示为ARM架构的ELF文件,与你用GCC交叉编译的结果类似。
内容的提问来源于stack exchange,提问作者Hashem HZ
相关产品推荐
相关产品推荐

