JNI - Problème de librairies

JNI - Problème de librairies - Java - Programmation

Marsh Posté le 13-06-2007 à 16:35:09    

Bonjour,
 
Je suis actuellement confronté à un problème de liens de librairies lorsque je veux tester mon application Java effectuant des appels C en JNI.
 
J'utilise une librairie "DICO" écrite en C, pour laquelle je dispose d'un fichier "DICO.h" et un fichier "libDICO.a".
Ayant besoin d'utiliser les fonctions proposées par cette librairie en Java, j'ai donc réalisé une classe permettant d'appeler ces fonctions C en JNI, nommée "JDICO".
 
J'arrive donc bien à compiler le Java, à générer le JNI et je compile mon fichier C en librairie dynamique .so comme ceci :
gcc -shared -I$JAVA_HOME/include -I$JAVA_HOME/include/linux -Irep_projet/include -Lrep_projet/lib -lDICO JDICO.c -o libJDICO.so
 
Ensuite, quand je veux lancer mon programme de test utilisant la librairie JNI précédemment produite par la commande :
java -Djava.library.path=rep_projet/lib TestJDICO
 
J'obtiens un message d'erreur me signalant qu'il ne trouve pas une fonction de la librairie DICO en C :

Exception in thread "main" java.lang.UnsatisfiedLinkError: rep_projet/lib/libJDICO.so: rep_projet/lib/libJDICO.so: undefined symbol: DICO_connecter
       at java.lang.ClassLoader$NativeLibrary.load(Native Method)
       at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
       at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
       at java.lang.Runtime.loadLibrary0(Runtime.java:823)
       at java.lang.System.loadLibrary(System.java:1030)
       at JDICO.<clinit>(JDICO.java:62)
       at TestJDICO.main(TestJDICO.java:70)


 
Pour information complémentaires :
- DICO_connecter est une fonction de la librairie C DICO, définie dans "DICO.h" et implémentée dans "libDICO.a"
- la ligne 62 de JDICO.java est : System.loadLibrary("JDICO" );
- la ligne 70 de TestJDICO.java est : JDICO.connecter(); (il s'agit du premier appel à une fonction de notre librairie JNI).
 
En espérant que quelqu'un ici pourra m'aider :)


Message édité par Minada le 13-06-2007 à 16:36:51
Reply

Marsh Posté le 13-06-2007 à 16:35:09   

Reply

Marsh Posté le 14-06-2007 à 16:51:51    

Up,
 
J'ai apparemment résolu le premier problème.
 
Mais une autre erreur liée aux librairies empêche toujours le fonctionnement.
Lors du lancement du programme de test, il se déroule normalement jusqu'au premier appel d'une fonction JNI où il me dit :
 

java: relocation error: rep_projet/bin/libJDICO.so: undefined symbol: DICO_connecter


 
Au final donc j'ai toujours un problème de symbole dans une librairie statique qui devrait normalement être défini :/
 
Quelqu'un aurait-il une solution ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed