Problèmes de liaison NDK Android

J’ai compilé Sox et al avec NDK. J’ai donc toutes les bibliothèques partagées compatibles avec Android.

J’ai créé un simple fichier test qui appelle une fonction sox. La construction de NDK me dit:

undefined reference to `sox_open_read' 

sox_open_read est défini dans sox.h. Je sais que c’est trouver sox.h car cela me donne un avertissement concernant ce fichier:

 In file included from (...)/sox/sox.h:19 

Alors peut-être qu’il veut trouver sox_open_read dans le fichier libsox.so. Eh bien, j’ai essayé environ 100 façons différentes de dire où se trouve la bibliothèque partagée de sox, par exemple

 LOCAL_SHARED_LIBRARY := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

Cependant, cela fonctionnera si je spécifie Sox en tant que bibliothèque statique:

 #LOCAL_SHARED_LIBRARY := sox LOCAL_STATIC_LIBRARIES := sox LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

Si j’ai bien compris, je ne veux pas créer de lien statique vers la bibliothèque sox, mais plutôt pour la lier de manière dynamic.

Vous devez définir libsox.so comme une bibliothèque prédéfinie. Créez un fichier Make comme suit et placez votre fichier libsox.so pré-construit dans le même répertoire que ce fichier Make. Après cela, vous pouvez utiliser libsox comme vous l’avez reconstruit. N’oubliez pas d’inclure ce makefile dans votre construction.

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := libsox LOCAL_SRC_FILES := libsox.so include $(PREBUILT_SHARED_LIBRARY)