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 :

JNI java.lang.UnsatisfiedLinkError si la classe n'est pas dans le default package


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 58
    Points
    58
    Par défaut JNI java.lang.UnsatisfiedLinkError si la classe n'est pas dans le default package
    Salut,
    j'ai récupéré une classe Java qui utilise jni pour utiliser une dll. Lorsque je j'utilise la classe dans le default package, ca marche. Si je déplace la classe dans un package appelé fish par exemple, j'ai l'erreur suivante au moment de l'appel de la méthode native (la classe s'apelle jni3d_)

    java.lang.UnsatisfiedLinkError: fish.jni3d_.jniMean3D([[BIIIIII)[[B

    Que faire ?

    C'est d'autant plus gênant qu'à ma connaissance on ne peut pas importer une classe du default package depuis une classe d'un autre package.

    merci pour vos suggestions

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    As-tu régénéré le header natif, et renommé la méthode native en conséquence ?

    Le nom de la méthode natif comporte le nom du package...

    a++

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 58
    Points
    58
    Par défaut
    Ben j'y connais pas grand chose en C et encore moins avec jni, j'ai bien les sources (.c et .h) mais je t'avoue que je ne sais pas comment faire et avec quels outils (compilo C sous windows et surement lib jni).

    Si tu peux éclairer un peu plus ma lanterne, merci d'avance !

    sinon tu confirmes qu'on ne peut pas importer une classe du default package depuis un autre package (ce qui m'éviterait ces problèmes) ?

    merci

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Si tu modifies le nom de la classe ou d'une méthode native, tu dois regénérer les headers natif avec javah... et le package fait bien partie du nom de la classe !


    Ensuite il faut bien sûr adapter le code C (renommer la méthode), et recompiler tout cela...

    a++

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 58
    Points
    58
    Par défaut
    ok,
    c'est lourd de garder les noms de classe et package dans les noms des méthodes, je m'y colle ...

    merci pour tes précieuses indications

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Une autre possibilité est l'héritage, après tout dépend comment les méthodes native ont été déclaré dans la classe mère : il faut qu'elles soient soit public soit protected.

    Si tu dispose de l'ensemble du code source natifs où sont déclaré les méthode la modification est relativement simple à faire :

    il faut en effet que tu regénère le fichier d'en tete

    Puis que tu renomme les méthodes une après l'autre dans le fichier C (il y en a autant que de méthode déclaré comme native tu le compile et tu en crée une librairie, tu peut trouver comment faire à l'adresse suivante :

    http://www.iut-orsay.fr/dptinfo/Peda...a/javaJni.html

    Les noms sont typiquement de ce type :

    Java_package_Class_fonction

    il faut que tu change uniquement la partie package, tu pourra facilement reconnaître les méthodes : elles commencent par Java, et ont les mêmes paramètres que dans le fichier d'en tête. Une fois renommé il faut que tu compile l'ensemble.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 99
    Points : 58
    Points
    58
    Par défaut
    merci pour l'info !

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

Discussions similaires

  1. java.lang.UnsatisfiedLinkError avec JNI
    Par sonjaja dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/06/2017, 11h12
  2. JNI : java.lang.UnsatisfiedLinkError
    Par Feneck91 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 28/09/2012, 06h15
  3. Réponses: 7
    Dernier message: 02/02/2011, 18h22
  4. [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
  5. Réponses: 1
    Dernier message: 12/09/2007, 10h47

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