Dalvik recherche un fichier .so avec une extension '.0' – pourquoi?

J'ai commencé à développer une application Android très simple qui se compose de trois parties:

  • L'application Java elle-même
  • Une bibliothèque partagée pré-construite (on l'appellera libfoo )
  • Une autre bibliothèque partagée qui utilise la bibliothèque pré-construite (on l'appellera libfoowrapper )

Le système de fichiers ressemble à ceci:

 jni Android.mk libfoo.so foowrapper.c 

Le fichier Android.mk contient les contenus suivants:

 LOCAL_PATH := $(call my-dir) #============================== include $(CLEAR_VARS) LOCAL_MODULE := foo-prebuilt LOCAL_SRC_FILES := libfoo.so include $(PREBUILT_SHARED_LIBRARY) #========================= include $(CLEAR_VARS) LOCAL_MODULE := foowrapper LOCAL_SRC_FILES := foowrapper.c LOCAL_SHARED_LIBRARIES := foo-prebuilt include $(BUILD_SHARED_LIBRARY) 

Lorsque je crée l'application dans Eclipse, les choses semblent bien fonctionner: aucune erreur n'est signalée. Cependant, lorsque je télécharge l'application sur mon Samsung Discover (avec Android 4.0.4), je reçois l'erreur suivante dans le journal:

 03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found) 

Pourquoi le Dalvik cherche-t-il un fichier .so.0 au lieu d'un fichier .so ? Quels changements dois-je apporter à mon application pour éliminer cette erreur?

One Solution collect form web for “Dalvik recherche un fichier .so avec une extension '.0' – pourquoi?”

Au moins dans le monde Linux, chaque bibliothèque partagée a un nom spécial appelé soname . Le soname a le préfixe lib , le nom de la bibliothèque, la phrase .so , suivie d'une période et d'un numéro de version qui est incrémenté chaque fois que l'interface change (comme une exception spéciale, les bibliothèques C de niveau inférieur ne commencent pas avec lib ). Un soname entièrement qualifié inclut comme préfixe le répertoire dans lequel il se trouve; Sur un système de travail, un soname entièrement qualifié est simplement un lien symbolique vers le real name la bibliothèque partagée.

Chaque bibliothèque partagée a également un real name , qui est le nom du fichier contenant le code de la bibliothèque. Le nom réel ajoute au soname une période, un nombre mineur, une autre période et le numéro de version. La dernière période et le numéro de version sont facultatifs. Le numéro mineur et le numéro de version supportent le contrôle de configuration en vous indiquant exactement quelle (s) version (s) de la bibliothèque sont installées. Notez que ces nombres pourraient ne pas être identiques à ceux utilisés pour décrire la bibliothèque dans la documentation, même si cela facilite les choses.

Référence: base standard Linux

Edit: Il semble que ce ne soit pas un problème rare, ne vous a pas vu de solutions réelles, mais peut-être cela vous amènera-t-il à trouver quelque chose qui fonctionne pour vous.

Problème avec LOCAL_SRC_FILES lors de l'utilisation de PREBUILT_SHARED_LIBRARY https://groups.google.com/forum/#!topic/android-ndk/_UhNpRJlA1k

Création de bibliothèques partagées non-versionnées pour Android http://www.opengis.ch/2011/11/23/creating-non-versioned-shared-libraries-for-android/

Bibliothèque 'libproj.so.0' introuvable https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/ai3tu0XXs88

coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.