IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

java.lang.UnsatisfiedLinkError avec JNI


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut java.lang.UnsatisfiedLinkError avec JNI
    Bonjour,
    j'essaie de faire fonctionner un programme tout simple avec JNI sous Windows. J'arrive à compiler le programme et à produire le fichier .h et la dll, mais quand j'essaie à éxuter le programme, j'ai ce message d'erreur.

    Exception in thread "main" java.lang.UnsatisfiedLinkError: afficheCpp
    at Bonjour.afficheCpp(Native Method)
    at Bonjour.main(Bonjour.java:26)

    La partie Java de code fonctionne, mais pas la partie C++.
    Le code du programme java c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Bonjour {
     
        public native void afficheCpp();
     
        //chargement de la librairie c++ HelloWorld
        static {System.loadLibrary("HelloW"); }
     
     
     
        public static void main (String[] args)
        {
            System.out.println("coucou (en java)\n");
            new Bonjour().afficheCpp();       
        }
     
     
    }
    Le Programme C, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #include <jni.h>
    #include "HelloW.h"
    #include <iostream>
    using namespace std;
     
    JNIEXPORT void JNICALL Java_Bonjour_afficheCpp (JNIEnv *env, jobject obj)
    {
    cout<<"Ich heisse Sonja ( en C++)"<<endl;
     
    }
    et le fichier .h, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class Bonjour */
     
    #ifndef _Included_Bonjour
    #define _Included_Bonjour
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
    * Class:     Bonjour
    * Method:    afficheCpp
    * Signature: ()V
    */
    JNIEXPORT void JNICALL Java_Bonjour_afficheCpp
      (JNIEnv *, jobject);
     
    #ifdef __cplusplus
    }
    #endif
    #endif
    J'ai déjà essayé plein de choses, mais je ne sais plus quoi faire. Au début j'ai pensé qu'il ne trouve pas la dll, mais si j'efface la dll, j'ai un autre message d'erreur:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloW in java.lib
    rary.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at Bonjour.<clinit>(Bonjour.java:19)

    Le problème c'est plutôt que le java compiler ne trouve pas la fonctionne afficheCpp dans la .dll. Sur Linux le même programme fonctionne, mais je ne vois pas ce qu'il faut encore changer pour que cela marche.
    Si quelqu'un peux m'aider, ce serais super.
    Sonja

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 84
    Par défaut
    je pense que ca vient du fait que tu n'as pas le chemin de ta DLL dans le classpath .

    essais de rajouter ca dans le classpath:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <classpathentry excluding="chemin de ta dll"  path="">
    	<attributes>
    		<attribute name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY" value="chemin de ta dll"/>
    	</attributes>
    </classpathentry>
    comme tu le vois je travail sous eclipse. si c'est pas ton cas le code peux changer un peu mais là je ne peux pas t'aider.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    Je crois plutôt que c'est un problème qui vient du GNU compilateur, voir

    http://www.cygwin.com/ml/cygwin/1998-07/msg00008.html

    Mais je n'ai pas encore essayé le MS-Dos compilateur.
    Je vais quand même essayer à ajouter mon dll dans le classpath. Merci entre-temps.

  4. #4
    Membre éclairé
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Par défaut
    Citation Envoyé par <_oodTi96Tiboo_>
    je pense que ca vient du fait que tu n'as pas le chemin de ta DLL dans le classpath .
    Je pense plutôt qu'il faut simplement ajouter le directory contenant la dll dans la variable système PATH. Car la variable classpath, c'est pour les ressources java et path pour les ressources natives.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    Mais il trouve la dll, il a juste un problème à lire la dll, ca veut dire à trouvé la méthode dans la dll

  6. #6
    Membre éclairé
    Inscrit en
    Mars 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 84
    Par défaut
    Oui alors ce serait bien un problème de compilation de la dll.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 4
    Par défaut
    J'ai eu le même problème et je l'ai résolu en ajoutant un fichier .def à passer au linker après la compilation C. Le fichier a cette tête là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    EXPORTS
    Java_Bonjour_afficheCpp
    Dans mon cas, le fichier était nécessaire sous Windows avec Cygwin, mais pas sur Unix.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JNI] - Eclipse "java.lang.UnsatisfiedLinkError"
    Par Pikouse dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 11/10/2010, 14h49
  2. Réponses: 6
    Dernier message: 22/10/2009, 12h17
  3. [JNI] Problème SWIG java.lang.UnsatisfiedLinkError
    Par Julien.M dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/09/2007, 16h15
  4. Réponses: 1
    Dernier message: 12/09/2007, 10h47
  5. [System.load] Exception java.lang.UnsatisfiedLinkError avec unknown file type
    Par jemini_fr dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 05/02/2007, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo