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