Ho un codice sorgente nativo scritto in C che vorrei eseguire sul mio dispositivo Android (Nexus 7). Ho già effettuato con successo molte ricerche e tutorial online sull'esecuzione di codice nativo su Android utilizzando Android NDK. Ho acquisito una certa conoscenza su questo. Tuttavia, il codice che ho utilizza le funzionalità complesse della libreria matematica standard, definite in complex.h. La libreria C NDK tuttavia non sembra supportare le funzionalità complesse. Ogni volta che faccio un NDK-build sul progetto ottengo:Come posso utilizzare complex.h per Android NDK?
fatal error: complex.h: no such file or directory.
Come soluzione ho pensato di ottenere la libreria matematica standard (libm.a) dal braccio-linux-gnueabi e collegarlo con la mia fonte d'origine. Qui è la mia 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)
ho dovuto collegare la libc del braccio-linux-gnueabi-gcc nonché libm ne ha bisogno. Il modulo "ComplexOperations" è stato compilato staticamente usando arm-linux-gnueabi-gcc con i flag del compilatore -march = armv7-a. Questa libreria utilizza complex.h. Questo genera senza errori e avvisi. Ma quando faccio funzionare l'applicazione e chiamo
System.loadLibrary("MySource");
ottengo questo errore su 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"...
Su questo errore viene generata un'eccezione UnsatisfiedLinkError che causa il blocco dell'applicazione, se non gestita.
Qualcuno può PER FAVORE aiutarmi !! Ho già provato a capirlo da giorni !! :(
Android non ha seriamente un 'complex.h'? –