Android Clang mips/mips64 汇编程序错误 "unable to execute command: program not executable"

Android Clang mips/mips64 assembler error "unable to execute command: program not executable"

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

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 上也有完全相同的问题,但在发生 "program not executable" 错误的地方有额外的输出:

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 体系结构与此命令完美配合(交换其他体系结构的路径和目标)。 i686、x86_64、aarch64、armv5te、armv6 和 armv7-a 都适用于 Windows x64 和 macOS。

我还尝试了路径周围所有 quotes/no-quotes 的组合 - 没有任何区别。


我使用 mips、mips64、mipsel 和 mips64el 时出现此问题。

-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 感兴趣。它将处理确保编译器可以像这样直接正确使用的细节。