我正在尝试使用以下命令(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会出现此问题。
答案 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感兴趣。它将处理确保编译器可以像这样直接正确使用的细节。