Ich habe nativen Quellcode in C geschrieben, den ich gerne auf meinem Android-Gerät (Nexus 7) ausführen würde. Ich habe bereits viele Forschung und Online-Tutorials zum Ausführen von nativem Code auf Android mit Android NDK erfolgreich durchgeführt. Ich habe einiges darüber gelernt. Der Code, den ich habe, nutzt jedoch die komplexen Funktionalitäten der Standard-Math-Bibliothek, die in complex.h definiert ist. Die NDK C-Bibliothek scheint jedoch die komplexen Funktionalitäten nicht zu unterstützen. Jedes Mal, wenn ich ein NDK-build auf dem Projekt bekomme ich:Wie kann ich complex.h für Android NDK verwenden?
fatal error: complex.h: no such file or directory.
Als Lösung Ich dachte an die Standard-Mathematik-Bibliothek bekommen (libm.a) von Arm-linux-gnueabi und verknüpfen es mit meiner natürlichen Quelle. Hier ist meine Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := StandardC
LOCAL_SRC_FILES := libc.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := mathLib
LOCAL_SRC_FILES := libm.a
LOCAL_STATIC_LIBRARIES := StandardC
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := ComplexOperations
LOCAL_SRC_FILES := libComplexOperations.a
LOCAL_STATIC_LIBRARIES := mathLib
LOCAL_C_INCLUDES += /usr/arm-linux-gnueabi/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := MySource
LOCAL_CFLAGS += -std=c99
LOCAL_SRC_FILES := com_samuel_test_ComplexOperationsLib.c
LOCAL_C_INCLUDES += /usr/arm-linux-gnueabi/include
LOCAL_STATIC_LIBRARIES := ComplexOperations
include $(BUILD_SHARED_LIBRARY)
ich die libc des Arms-linux-gnueabi-gcc zu verbinden hatte sowie libm es braucht. Das Modul "ComplexOperations" wurde statisch mit arm-linux-gnueabi-gcc mit Compiler-Flags -march = armv7-a kompiliert. Diese Bibliothek nutzt complex.h. Dies wird ohne Fehler und Warnungen erstellt. Aber wenn ich die Anwendung und rufe
System.loadLibrary("MySource");
ich diesen Fehler auf logcat:
E/dalvikvm(3932): dlopen("/data/app-lib/com.samuel.test-1/libMySource.so") failed: Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate symbol ".LANCHOR2" referenced by "libMySource.so"...
Auf diesem Fehler eine UnsatisfiedLinkError Ausnahme ausgelöst wird, die die Anwendung zum Absturz bringt, wenn nicht behandelt.
Kann jemand PLEASEE helfen mir aus !! Ich habe das schon seit Tagen selbst versucht! :(
Android ernsthaft hat keine 'complex.h'? –