Peut-bibliothèque partagée à l'appel d'une autre bibliothèque partagée?
Peut une bibliothèque partagée charger et appeler des fonctions à partir d'une autre bibliothèque partagée?
J'ai Partagé bibliothèque libDsmTestLib.donc qui utilisent un autre bibliothèques partagées libDsmShared.donc et libPINDsmShared.donc
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := DsmTestLib
LOCAL_SRC_FILES := DSM_Library.cpp
LOCAL_LDLIBS := -lDsmShared
LOCAL_LDLIBS += -lPINDsmShared
include $(BUILD_SHARED_LIBRARY)
quand je créer libDsmTestLib.donc et souhaitez l'utiliser dans mon android application java comme ceci:
package com.dsm;
import android.app.Activity;
import android.os.Bundle;
public class dsmTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
static {
try {
System.loadLibrary("DsmTestLib");
}
catch( UnsatisfiedLinkError e ) {
System.err.println("Native code library failed to load.\n" + e);
}
}
}
Dans le bloc catch, j'obtiens l'erreur
Ne peut pas charger la bibliothèque: link_image[1962]:
33 n'a pas pu charger nécessaire de la bibliothèque
'libDsmShared.donc, " pour
'libDsmTestLib.si"
(load_library[1104]: Bibliothèque
'libDsmShared.si " non trouvé)
Fonction Loadlibrary ne peux pas le trouver en bibliothèque libDsmShared.donc qui utilise ma bibliothèque principale libDsmTestLib.donc, Qui peut dire pourquoi ? et que puis-je faire pour résoudre ce problème ?
Des Informations Supplémentaires
J'avais une bibliothèque statique (.donc, écrit en C++) avec des fonctionnalités qui je veux utiliser à partir de mon Java de l'application android, pour que je crée .rpc et .h les fichiers dans lesquels j'ai appeler la fonction de la créé précédemment bibliothèque.
OriginalL'auteur Viktor Apoyan | 2011-05-18
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution de cette façon - explicitement le chargement des librairies:
OriginalL'auteur Vladimir Berezkin
Devrait être:
Aussi n'oubliez pas de copier
libutils.so
dans votrelibs/armeabi
dossierOriginalL'auteur knightwang
J'ai eu le même message d'erreur . C'est comment je l'ai résolu, et peut-être vous devriez essayer cette méthode.
LOCAL_LDLIBS += -L$(LOCAL_PATH)/libs/libutils.so
OriginalL'auteur Vlad Yarovyi
Non, Android VM recherche le si fichier dans ses propres systèmes de fichiers, mais pas un dossier comme
[C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib]
(je pense).Il recherche à partir de la
@androidvm:/system
, ou d'autres dossiers spécifiés par java.de la bibliothèque.chemin d'accès.OriginalL'auteur cyoudatu
Pour info, je viens de découvrir après une longue session de débogage que l'ordre dans lequel la charge lib importe.
OriginalL'auteur Sid Sarasvati
Tout d'abord, votre Activité de charger toutes les bibliothèques partagées
Inclure les "lib*.donc," lors de la compilation de votre code natif (en le Android.mk) comme dans
OriginalL'auteur Zennichimaro
J'ai trouvé cela et de le tester:
De l'Android l'éditeur de liens dynamiques eu un bug qui empêchait ce travail,
mais
a été fixée dans la 1.6, je crois.
Si vous utiliser le NDK, utiliser "LOCAL_SHARED_LIBRARIES := libB libC" quand
la définition de
le libA module.
Cela suppose que libB et de la libC sont également NDK modules qui ont été générés
avec le NDK.
dans le libA module de définition, l'utilisation LOCAL_LDLIBS +=
/full/chemin/vers/libB.donc /full/chemin/vers/libC.donc
cela garantit que le symbole correct exportations sont générés dans libA.donc
copier manuellement libB.donc, et de la libC.donc, pour $APP_PROJECT/libs/armeabi
avant
la reconstruction de votre .apk,
cela garantit qu'il sera copié dans /data/data//lib à
le temps d'installation par le gestionnaire de paquet.
maintenant Android.mk avoir ce look:
mais maintenant erreur
eu lieu, mais quand je vérifie C:/cygwin/home/android-ndk-r5b/samples/testingDsm/lib/libDsmShared.so ce chemin, j'ai trouvé que la bibliothèque existe ... c'est Quoi le mettre ?
OriginalL'auteur Viktor Apoyan