C++ Clang不是为x86以外的平台编译代码

C++ Clang不是为x86以外的平台编译代码,c++,arm,llvm,clang,C++,Arm,Llvm,Clang,我在Ubuntu 12.04 x86 64位下,我已经成功地从官方svn存储库编译了32位版本的llvm/clang 我现在正在尝试为ARM编译C++代码,在这点上我不关心平台版本,比如 ARMV5>代码> VS代码> ARMV7A,我将重点讨论平台转换如何工作在 CLAN:< /P> llvm-config --targets-built ARM CellSPU CppBackend Hexagon Mips MBlaze MSP430 NVPTX PowerPC Sparc X86 XCor

我在Ubuntu 12.04 x86 64位下,我已经成功地从官方svn存储库编译了32位版本的
llvm/clang

我现在正在尝试为ARM编译C++代码,在这点上我不关心平台版本,比如<代码> ARMV5>代码> VS代码> ARMV7A<代码>,我将重点讨论平台转换如何工作在<代码> CLAN<代码>:< /P>

llvm-config --targets-built
ARM CellSPU CppBackend Hexagon Mips MBlaze MSP430 NVPTX PowerPC Sparc X86 XCore
但是下面的命令不起作用

clang++ -arch arm soft.cpp -o soft_ARM
输出是

clang-3: warning: argument unused during compilation: '-arch arm'
我也尝试过类似gcc的变体或其他组合,如
-arch=arm
-arch=armv7a
-march=armv5
,但似乎没有任何效果

在阅读了一些文档之后,我注意到clang仅在MacOSX/Darwin下适用于ARM,而在其他操作系统下它不应该适用于ARM


我如何使用clang为ARM编译,以及
llvm config--targets builded
的输出到底是关于什么的?

-arch是达尔文唯一的特性。您应该在非达尔文平台上使用-target。或者,编译llvm/target,指定target三元组,或者创建从clang到-clang的链接。在您的情况下,目标三元组将是arm none linux gnueabi

我刚刚编译了一个64位版本的clang,其行为始终与以前相同。不工作,
clang-3:警告:编译期间未使用参数:'-target=arm none linux gnueabi'
哦,抱歉,它应该是-target arm-none-linux-gnueabi1前进了一小步,但它一直不工作
/usr/bin/as:unrecogned option'-mfloat abi=softfp'clang-3:错误:汇编程序命令失败,退出代码为1(使用-v查看调用)
@user1797612,clang驱动程序不太可能为您选择正确的工具链。很可能,您必须手动完成所有操作。因此,请尝试
clang-cc1-triple-arm-linux-gnueabihf-emit llvm-o-…
并将其输出传输到
llc-mtriple=…
,然后从交叉binutils中使用适当的
as
ld
版本。@user1797612,clang不知道从何处找到交叉binutils。因此,您需要将clang(或createsoftlink)放入sysroot的bin目录中。或者,您可能会幸运地使用-sysroot或-gcc工具链选项。