Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1649 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  JNI - Problème de librairies

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

JNI - Problème de librairies

n°1574505
Minada
PSN : minada69
Posté le 13-06-2007 à 16:35:09  profilanswer
 

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
mood
Publicité
Posté le 13-06-2007 à 16:35:09  profilanswer
 

n°1575034
Minada
PSN : minada69
Posté le 14-06-2007 à 16:51:51  profilanswer
 

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 ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  JNI - Problème de librairies

 

Sujets relatifs
Problème de destruction dynamique d'AppletProblème URL REWRITING
Problème de droit sur une bdd : user inexistantGros problème ! Incompatibilité ?
probleme de programmationProbleme image prise par caméra progressive scan
Probleme d'affichage d'image sur IEProblème D'insertion dans SQL
[Résolu] Problème de return d'une fonctionprobleme de mise en page d'un formulaire
Plus de sujets relatifs à : JNI - Problème de librairies


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR