2012-06-27 2 views
4

Tout d'abord je veux vous dire ce que je veux faire. J'ai un fichier .h et un fichier .c avec le code C habituel dans lequel j'ai créé une bibliothèque partagée avec le NDK Android. J'ai maintenant un fichier .so qui s'appelle libtry.so. En outre, je veux utiliser le code natif dans mon projet Android Eclipse. Donc, j'ai créé .java fichier avec la classe « contre » et le contenuNDK-lier une bibliothèque dans une autre bibliothèque "Impossible de charger la bibliothèque: link_image [1966]: 1765 n'a pas pu charger la bibliothèque nécessaire ..."

public native static int Number(int n); 

et

static 
{ 
    System.loadLibrary("test"); 
} 

Puis-je créer un fichier C-tête du fichier .java avec l'outil javah. Ensuite, je crée un fichier C-source pour le fichier C-Headerfile dans lequel j'implémente le code natif.

Ensuite, je crée une bibliothèque partagée avec ces deux fichiers avec LOCAL_MODULE := test, de sorte que le fichier sera nommé libtest.so. Mais le fait est que je veux lier la bibliothèque partagée libtry.so, que j'ai créée au début, à cette bibliothèque partagée. Donc, dans le fichier Android.mk de libtest.so, j'ai mis LOCAL_LDLIBS := -L/root/Android/Samples/Test/libs/ -ltry.

En fait, cela fonctionne parce que je peux compiler ce fichier Android.mk avec ndk-build.

Mais maintenant, dans mon projet Eclipse, si je veux utiliser la bibliothèque libtest.so, cela ne fonctionne pas. Je veux dire Si je crée un objet de la classe "Counter" dans lequel la bibliothèque libtest.so est chargée,

Je reçois le error: "Cannot load library: link_image[1966]: 1752 could not load needed library 'libtry.so' for 'libtest.so'".

Qu'est-ce que je fais mal? Merci d'avance.

+0

vous utilisez votre fichier ainsi pour un projet différent ou celui dans lequel vous avez votre code C –

+0

Pour le même projet. En fait, je veux l'expliquer à nouveau pour plus de détails. Le fichier .so libtry.so contient des fonctions qui doivent être utilisées par libtest.so. Donc ce que j'ai fait était de lier le libtry.so à libtest.so dans le Android.mk de libtest.so, comme montré dans mon premier commentaire. Je peux compiler avec le ndk-buid. Mais je ne peux pas utiliser libtest.so dans mon projet Eclipse à cause de l'erreur montrée dans le titre de ce sujet. –

+0

Ma réponse avec ce lien a été supprimée. http://stackoverflow.com/questions/10593987/android-ndk-linking/10615769#10615769 En réponse à votre réponse, oui, les étapes dans le lien montre comment construire un 3ème libtry.so avec juste source c. Dans mon cas, c'était une bibliothèque de physique que nous devions utiliser dans beaucoup de nos jeux. Nous avons donc envisagé de créer une bibliothèque séparée pour une utilisation future. – codetiger

Répondre

4

Vous liez une bibliothèque à une bibliothèque. Dans le code Java, ils doivent être chargés explicitement dans l'ordre inverse, par ex.

static 
    { 
     System.loadLibrary("dependencylib"); // try 
     System.loadLibrary("mainlib");  // test 
    } 

Réponse prise de here

+0

Merci l'homme, j'ai été bloqué à ce problème pendant plus de 3 jours. –

Questions connexes