Android Clang mips / mips64汇编程序错误“无法执行命令:程序不可执行”

时间:2016-10-07 22:23:29

标签: android-ndk clang mips

我正在尝试使用以下命令(Windows x64)编译C源文件:

E:/Android/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang -target mipsel-none-linux-android -gcc-toolchain E:/Android/android-sdk/ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64 -D__android__ --sysroot=E:/Android/android-sdk/ndk-bundle/platforms/android-24/arch-mips -o "C:/array.o" -c "C:/array.c"

每次我收到错误:

clang.exe: error: unable to execute command: program not executable
clang.exe: error: assembler command failed with exit code 1 (use -v to see invocation)

我已经确认存在文件夹和必需的二进制文件(我的NDK安装来自Android SDK本身)。

我在macOS上也有完全相同的问题,但是在发生“程序不可执行”错误的情况下会有额外的输出:

clang: error: unknown argument: '-march'
clang: error: unknown argument: '-mabi'
clang: error: unknown argument: '-call_nonpic'
clang: error: unknown argument: '-KPIC'
clang: error: no such file or directory: 'mips32r2'
clang: error: no such file or directory: '32'
clang: error: assembler command failed with exit code 1 (use -v to see invocation)

-v显示以下内容(在Windows x64和macOS上,macOS调用“/ usr / bin / as”):

Android clang version 3.8.256229  (based on LLVM 3.8.256229)
Target: mipsel-none-linux-android
Thread model: posix
...
clang -cc1 version 3.8.256229 based upon LLVM 3.8.256229 default target x86_64-unknown-linux
...
"as" -march mips32r2 -mabi 32 -call_nonpic -EL -KPIC

椭圆是路径输出(所有验证都是正确的) - 重申同样的问题在Windows x64和macOS上都会发生。

其他所有受支持的Android NDK架构都可以完美地使用此命令(交换路径和其他架构的-target)。 i686,x86_64,aarch64,armv5te,armv6和armv7-a都可以在Windows x64和macOS上运行。

我还尝试了路径周围的引号/无引号的所有组合 - 没有区别。

mips,mips64,mipsel和mips64el会出现此问题。

1 个答案:

答案 0 :(得分:2)

  

-gcc-toolchain E:/ Android / android-sdk / ndk-bundle / toolchains / llvm / prebuilt / windows-x86_64

GCC工具链需要指向GCC工具链,而不是Clang。我不知道为什么其他任何架构都在工作。 Clang可能正在使用内置的汇编程序,但仍然没有解释它在哪里获取它的链接器......

您可能对https://android.googlesource.com/platform/ndk/+/master/docs/user/standalone_toolchain.md感兴趣。它将处理确保编译器可以像这样直接正确使用的细节。