当我尝试编译一些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.