备份一下手工书写Android JNI工程时mk的模板,以及uses VFP register arguments, output does not问题
2017-10-25 08:57
441 查看
Android JNI开发,手工建立MK模板:
Application.mk
Android.mk
本来想用一下,于仕琪博士的人脸检测库,无奈怎么也链接不上库~~~~
D:/Android/android-sdk-windows/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: ../../../../src/main/jniLibs/armeabi-v7a/libysqfd32.so uses VFP register
arguments, output does not
网搜所有的答案,都不能解决问题,只好求助NDK社区(https://github.com/android-ndk/ndk/),得到答复:
https://github.com/android-ndk/ndk/issues/552#event-1308445210
就是根本不支持啊,开始的时候我也纳闷,怎么就没有一个宏能够改变默认的浮点数使用方式?
虽然得到google人员的肯定回复,但还是有个疑问:NDK编译工具下的hard是干什么用的?
toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\armv7-a\hard\*
这些库难道不是为了支持hard float?
还是另找出路:arm-linux-gnueabihf 貌似可以解决我的问题,待实践~~~~
找到原因了,Hard VFP是不支持NDK交叉编译工具的,只能使用板载系统工具本地编译,不过这样arm-linux-gnueabihf又有什么用呢???
其实是支持交叉编译的,使用 arm-linux-gnueabihf 编译后的程序里面有
Tag_ABI_VFP_args: VFP registers
普通的交叉编译工具是没有这个的!!!
How to Detect if an ARM ELF Binary is Hard-float (ARMHF) or Soft-float (ARMEL)
https://www.cnx-software.com/2013/04/22/how-to-detect-if-an-arm-elf-binary-is-hard-float-armhf-or-soft-float-armel/
以下是一个小程序:
mfloat.c
Application.mk
APP_ABI := armeabi-v7a APP_STL := gnustl_static APP_CPPFLAGS := -frtti -fexceptions -std=c++11 APP_PLATFORM := android-15
Android.mk
LOCAL_PATH := $(call my-dir) #print message #$(warning "the value of LOCAL_PATH is $(LOCAL_PATH)") include $(CLEAR_VARS) LOCAL_MODULE := native-lib LOCAL_C_INCLUDES = $(LOCAL_PATH)/3rdparty/include LOCAL_SRC_FILES := native-lib.cpp #\ #3rdparty/src/aaidsys.c \ #3rdparty/src/queue.c \ #3rdparty/src/video.c \ #3rdparty/src/ysqfd.c \ #3rdparty/src/yuvproc.c #LOCAL_CFLAGS := -mfloat-abi=hard -D_NDK_MATH_NO_SOFTFP=1 LOCAL_CPPFLAGS := -s -mfloat-abi=softfp -mfpu=neon -D_NDK_MATH_NO_SOFTFP=1 ####include the 3rdparty(method1)#### #LOCAL_LDLIBS += -llog -L$(LOCAL_PATH)/3rdparty/lib/ -lysqfd32 ####include the 3rdparty(method2)#### #LOCAL_SHARED_LIBRARIES := ysqfd32 include $(BUILD_SHARED_LIBRARY) ####the 3rdparty#### include $(CLEAR_VARS) #$(warning "the value of LOCAL_PATH is $(LOCAL_PATH)") LOCAL_MODULE := ysqfd32 LOCAL_SRC_FILES := 3rdparty/lib/libysqfd32.so include $(PREBUILT_SHARED_LIBRARY)
本来想用一下,于仕琪博士的人脸检测库,无奈怎么也链接不上库~~~~
D:/Android/android-sdk-windows/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: error: ../../../../src/main/jniLibs/armeabi-v7a/libysqfd32.so uses VFP register
arguments, output does not
网搜所有的答案,都不能解决问题,只好求助NDK社区(https://github.com/android-ndk/ndk/),得到答复:
https://github.com/android-ndk/ndk/issues/552#event-1308445210
Like I said in the other bug, you don't. Android does not use the hard float calling convention. You do not need -mfloat-abi=hard to use floating point instructions. It only affects the calling convention.
就是根本不支持啊,开始的时候我也纳闷,怎么就没有一个宏能够改变默认的浮点数使用方式?
虽然得到google人员的肯定回复,但还是有个疑问:NDK编译工具下的hard是干什么用的?
toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\lib\gcc\arm-linux-androideabi\4.9.x\armv7-a\hard\*
这些库难道不是为了支持hard float?
还是另找出路:arm-linux-gnueabihf 貌似可以解决我的问题,待实践~~~~
找到原因了,Hard VFP是不支持NDK交叉编译工具的,只能使用板载系统工具本地编译,不过这样arm-linux-gnueabihf又有什么用呢???
其实是支持交叉编译的,使用 arm-linux-gnueabihf 编译后的程序里面有
Tag_ABI_VFP_args: VFP registers
普通的交叉编译工具是没有这个的!!!
How to Detect if an ARM ELF Binary is Hard-float (ARMHF) or Soft-float (ARMEL)
https://www.cnx-software.com/2013/04/22/how-to-detect-if-an-arm-elf-binary-is-hard-float-armhf-or-soft-float-armel/
以下是一个小程序:
@echo off set PATH=F:\gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_win32\bin;D:\Android\android-sdk-windows\platform-tools;%PATH% echo "mfloat compiling......" arm-linux-gnueabihf-gcc.exe -v -static mfloat.c -o demo rem arm-linux-gnueabihf-gcc.exe -v -ffast-math mfloat.c -o demo pause rem arm-linux-gnueabihf-readelf.exe -a demo pause rem arm-linux-gnueabihf-readelf.exe -a libysqfd32.so pause adb push demo /data/local/tmp/ adb shell chmod 777 /data/local/tmp/demo adb shell ls -l /data/local/tmp/ adb shell /data/local/tmp/demo pause
mfloat.c
#include <stdio.h> int main(void) { double a,b,c; a = 23.543; b = 323.234; c = b/a; printf("the 13/2 = %f\n", c); printf("hello world !\n"); return 0; }
相关文章推荐
- ffmpeg交叉编译问题 xxx.elf uses VFP register arguments, yyy.o does not
- Android bdk-build error:libxxx.so/.a use VFP register arguments, output does not解决办法
- android jni 出现format not a string literal and no format arguments [-Werror=format-security]问题
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-l
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-l
- 解决:eclipse导入android时工程下没有R文件的问题,以及style.xml文件报错
- does not declare uses-library android.test.runner
- 关于Android下的JNI编程、SO库以及NDK的一些问题
- xenserver上模板生成rhel6虚拟机后的“Device eth0 does not seem to be present, delaying initialization” 问题解决
- Android_NDK问题:APP_BUILD_SCRIPT points to an unknown file: <project_path>/jni/Android.mk
- android中,使用ant多渠道打包时出现Perhaps JAVA_HOME does not point to the JDK问题的解决方法
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare uses-l
- does not declare uses-library android.test.runner
- android studio上的jni编译流程以及Android.mk文件的处理。
- 从今天开始记录一下每天学到的Android知识、以及开发中遇到的问题
- Android工程中jni本地调用opencv时,某些函数不识别问题
- 好久没更新博客了,今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layout与values目录,layou
- Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法
- 搬家、备份后启动Android PANIC :Could not open D:\java2\android\android-sdk-windows\.android\avdtest.ini问题的解决
- [Centos] mod_wsgi 安装流程以及遇到问题解决办法。apxs: command not found 或 Sorry, Python developer package does not appear to be installed.