我已经使用“-mfloat-abi = hard”参数预构建了库(libxxx.so) . 现在我想用这个lib编译我的本机代码,并用ndk构建共享库(.so) .
Application.mk:
APP_ABI:= armeabi-v7a
Android.mk:
LOCAL_PATH:= $(调用my-dir)包括$(CLEAR_VARS)LOCAL_MODULE:= xxx LOCAL_SRC_FILES:= libxxx.so include $(CLEAR_VARS)LOCAL_MODULE:= xxx_wrapper LOCAL_SRC_FILES:= xxx_wrapper.cpp xxx_wrapper.h LOCAL_SHARED_LIBRARIES := xxx LOCAL_C_INCLUDES:= / softdev / host / include / LOCAL_LDLIBS:= -L $(SYSROOT)/ usr / lib -llog LOCAL_ARM_NEON:= true LOCAL_CXXFLAGS = -mfpu = vfp -mfloat-abi = hard LOCAL_CFLAGS = -mfpu = vfp -mfloat-abi = hard include $(BUILD_SHARED_LIBRARY)
在 ndk-build
我收到一个错误:
/softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ . ./../arm-linux-androideabi/bin/ld:错误:/Users/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o使用VFP寄存器参数,输出不/softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../ ../../../arm-linux-androideabi/bin/ld:错误:/Users/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/libxxx.so使用VFP寄存器参数,输出不收集2:ld返回1退出状态
我该如何解决?根据输出,两个.o文件都是硬浮动的,我无法弄清楚“输出”是什么意思?我在模块描述中添加了'-mfpu = vfp -mfloat-abi = hard' .
更新:我已经执行了ndk-build V = 1并且在命令行中没有找到“-mfpu = vfp -mfloat-abi = hard”参数,所以我试图手动完成(但仍然没有结果):
mba-anton:build asmirnov $ /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-g
-Wl,-soname,libxxx_wrapper.so -shared --sysroot = / softdev / android-ndk-r8e / platforms / android-8 / arch-arm / Users / asmirnov / Documents / dev / src / xxx_jni / obj / local / armeabi-v7a / objs-debug / xxx_wrapper / xxx_wrapper.o / Users / asmirnov / Documents / dev / src / xxx_jni / obj / local / armeabi-v7a / libstdc .a -lgcc / Users / asmirnov / Documents / dev / src / xxx_jni / obj / local / armeabi-v7a / libxxx.so -no-canonical-prefixes -march = armv7-a -mfpu = vfp -mfloat-abi = hard -Wl, - fix-cortex-a8 -Wl, - no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -L / softdev / android-ndk-r8e / platforms / android-8 / arch-arm / usr / lib -L / usr / lib -llog -lstdc -lc -lm -o /Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx_wrapper.so / softdev / android-ndk-r8e / toolchains / arm -linux-androideabi-4.6 /预建/达尔文86 / bin中/../ LIB / GCC /臂-Linux的androideabi / 4.6 /../../../../臂-Linux的androideabi / bin中/ ld:错误:/Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o使用VFP寄存器参数,输出做es not /softdev/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../ ../../arm-linux-androideabi/bin/ld:错误:/Users/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx.so使用VFP寄存器参数,输出不collect2:ld返回1退出状态
2 回答
你可能想要这个:-march = armv7-a -mfloat-abi = softfp -mfpu = vfp
总之,“-mfloat-abi = hard”或“-mfloat-abi = softfp”参数并不是指使用硬件或软件FPU .
有关详细信息,请参阅Getting hardware floating point with android NDK,fadden给出了一个清晰明确的答案,所以我不打算在此重复 .
解:
APP_ABI := armeabi-v7a-hard
代替
APP_ABI := armeabi-v7a
您还可以在Android.mk中添加这些标志: