错误而编制的Andr​​oid JNI示例:无效-march =选项:`的ARMv5TE“示例、选项、错误、Andr

2023-09-06 03:02:16 作者:砍柴少女

当我尝试编译一些Android的NDK样,我总是得到这个错误:

  $ CD〜/开发/安卓/ NDK /样本/ HELLO-JNI
$〜/开发/安卓/ NDK / NDK建造
GDBSERVER:[臂的Linux androideabi-4.4.3]库/ armeabi / gdbserver的
Gdbsetup:库/ armeabi / gdb.setup
编译大拇指:HELLO-JNI< = HELLO-jni.c
汇编的消息:
致命错误:无效-march =选项:`的ARMv5TE
使:*** [OBJ /本地/ armeabi / OBJ文件调试/ HELLO-JNI / HELLO-jni.o]错误1
 

有什么毛病我或我的系统?

解决方案

我已经找到了解决办法:

  $ LN -s $ NDK_PATH /工具链/ ARM-Linux的androideabi-4.4.3 / prebuilt / Linux的-86 /斌/ ARM-Linux的androideabi,作为$NDK_PATH/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/as
 

首先,我跑了建设者选择它来显示正在执行的commads:

  $ NDK建造-B V = 1
 

让我发现了它是如何执行的编译器,并通过同一个命令strace的

  strace的臂的Linux androideabi-GCC -MMD -MP -MF ./obj/local/armeabi/objs-debug/hello-jni/hello-jni.od -fpic  - 高效多功能截面-funwind桌-fstack-保护-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march =的ARMv5TE -mtune =的XScale -msoft流通-mthumb -Os -fomit-frame-pointer的-fno-strict-别名-finline-上限= 64 -Ijni -DANDROID -Wa, -  noexecstack -O0 -g -I /家庭/自作聪明/开发/安卓/ NDK /平台/ Android为8 /弓臂/ usr / include目录-c JNI /hello-jni.c -o ./obj/local/armeabi/objs-debug/hello-jni/hello-jni.o
 

这表明,一些未知的原因臂的Linux androideabi-GCC使得搜索的汇编程序所认为的标准,但在这种情况下,无效的名称'作为'而不是'臂的linux-androideabi,作为

stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/bin/../libexec/gcc/arm-linux-androideabi/4.4.3/as", 0xbfedea68)= -1 ENOENT(没有这样的文件或目录) stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/bin/../libexec/gcc/as", 0xbfedea68)= -1 ENOENT(没有这样的文件或目录) stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/arm-linux-androideabi/4.4.3/as", 0xbfedea68)= -1 ENOENT(没有这样的文件或目录) stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/$p$pbuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/as", 0xbfedea68)= -1 ENOENT(没有这样的文件或目录) 的vfork()= 6931 的waitpid(6931,汇编信息: 致命错误:无效-march =选项:`的ARMv5TE

所以我做在它有望成为第一位名为作为'软链接。

When I try to compile some android ndk samples I always get this error:

$ cd ~/Dev/Android/ndk/samples/hello-jni
$ ~/Dev/Android/ndk/ndk-build
Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Compile thumb  : hello-jni <= hello-jni.c
Assembler messages:
Fatal error: invalid -march= option: `armv5te'
make: *** [obj/local/armeabi/objs-debug/hello-jni/hello-jni.o] Error 1

What's wrong with me or with my system?

解决方案

I've found a solution:

$ ln -s $NDK_PATH/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-as $NDK_PATH/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/libexec/gcc/arm-linux-androideabi/4.4.3/as

First I ran the builder with options for it to display the commads being executed:

$ ndk-build -B V=1

so that I discovered how it executes the compiler and passed the same command to strace

strace arm-linux-androideabi-gcc -MMD -MP -MF ./obj/local/armeabi/objs-debug/hello-jni/hello-jni.o.d -fpic -ffunction-sections -funwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Ijni -DANDROID  -Wa,--noexecstack -O0 -g -I/home/aleck/Dev/Android/ndk/platforms/android-8/arch-arm/usr/include -c  jni/hello-jni.c -o ./obj/local/armeabi/objs-debug/hello-jni/hello-jni.o

which reveals that for some unknown reason arm-linux-androideabi-gcc makes a search of assembler program by thought the standard but in this case invalid name 'as' instead of 'arm-linux-androideabi-as'

stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../libexec/gcc/arm-linux-androideabi/4.4.3/as", 0xbfedea68) = -1 ENOENT (No such file or directory)
stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../libexec/gcc/as", 0xbfedea68) = -1 ENOENT (No such file or directory)
stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/arm-linux-androideabi/4.4.3/as", 0xbfedea68) = -1 ENOENT (No such file or directory)
stat64("/home/aleck/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/as", 0xbfedea68) = -1 ENOENT (No such file or directory)
vfork()                                 = 6931
waitpid(6931, Assembler messages:
Fatal error: invalid -march= option: `armv5te'

so I made a soft link named 'as' in the first place where it is expected to be.

 
精彩推荐