Android-NDK-eabi - wie man ndk wissen, mit harten fp?
Habe ich vorgefertigte Bibliothek (libxxx.so) mit "-mfloat-abi=hard" - parameter. Nun möchte ich kompilieren meine native code mit dieser lib und build shared lib (.so) mit ndk.
Anwendung.mk:
APP_ABI := armeabi-v7a
Android.mk:
LOCAL_PATH := $(call-my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := xxx
LOCAL_SRC_FILES := libxxx.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := xxx_wrapperLOCAL_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)
auf ndk-build
ich erhalte eine Fehlermeldung:
/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:
Fehler:
/Benutzer/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o
verwendet VFP register arguments, Ausgabe nicht
/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:
Fehler:
/Benutzer/asmirnov/Documents/dev/src/project/obj/local/armeabi-v7a/libxxx.so
verwendet VFP register arguments, Ausgabe nicht collect2: ld zurückgegeben, 1
exit-status
Wie kann ich es beheben? Beide .o Dateien werden über hard-float-je nach Ausgang und ich kann nicht herausfinden, was "output" bedeutet? Ich habe Hinzugefügt '-mfpu=vfp -mfloat-abi=hard " zu meiner Modul-Beschreibung.
UPDATE: ich habe ausgeführt, ndk-build V=1 und fand keine "-mfpu=vfp -mfloat-abi=hard" - Argumente in der Kommandozeile, also ich ich habe versucht, es manuell zu tun (aber immer noch kein Ergebnis):
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
/Benutzer/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libstdc++.ein
-grenzüberschreitenden Zweckverbandes " /Benutzer/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx.so
-nicht-kanonischen-Präfixe -march=armv7-a-mfpu=vfp -mfloat-abi=hard -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,nun -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/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld:
Fehler:
/Benutzer/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/objs-debug/xxx_wrapper/xxx_wrapper.o
verwendet VFP register arguments, Ausgabe nicht
/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:
Fehler:
/Benutzer/asmirnov/Documents/dev/src/xxx_jni/obj/local/armeabi-v7a/libxxx.so
verwendet VFP register arguments, Ausgabe nicht
collect2: ld zurückgegeben, 1 exit status
- Ähnlich wie stackoverflow.com/questions/16846430/...
- ja. ich habe gesucht, aber es gibt keine Lösung, außer die Worte nur.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möchten Sie vielleicht diese:
-march=armv7-a-mfloat-abi=softfp -mfpu=vfp -
In einem Wort, "-mfloat-abi=hard" oder "-mfloat-abi=softfp" - argument nicht bezieht sich auf die Nutzung von hardware-oder software-FPU.
Finden Sie Erste hardware-floating-point mit android NDK für mehr details fadden hat eine große und klare Antwort, also ich nicht die Mühe, Sie zu wiederholen hier.
Lösung:
APP_ABI := armeabi-v7a-hard
statt
APP_ABI := armeabi-v7a
Auch Sie können diese flags in Android.mk: