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


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Février 2007
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Février 2007
    Messages : 253
    Par défaut JNI : java.lang.UnsatisfiedLinkError
    Bonjour à tous.

    Je galère depuis des heures sur un problème d'une simplicité enfantine (en tout cas pour moi qui fait du C++).

    Je travaille sous Eclipse / JRE 7
    J'utilise un .jar compilé pour utiliser une dll native via JNI.
    Ce .jar c'est gdal.jar un wrapper JNI autour de gdal (produit cartographique).

    Jusque là, tout va bien. Sauf que le gdal.jar et toutes ses dépendances (dlls) ne sont pas situés à la racine du projet mais correctement ordonés dans un répertoire "lib". Rien de bien exceptionnel ... sauf pour java !

    En effet, si j'ajoute le .lib au classpath via (repRootJar est le chemin root en absolu, calculé précedemment) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JavaLibraryPath.addToJavaLibraryPath(new File(repRootJar,"lib/"));
    je peux charger mes dlls avec "System.loadLibrary("expat_ogdi3.2.0.beta2");" par exemple. cette dll est une des dlls chargées par gdal (dépendance).
    Ceci fonctionne pour toutes les dlls sauf que l'une d'entre elle (driver JPeg2000) a une dépendance sur le runtime .net et elle provoque une exception au chargement.

    On oublie, on supprime le loadLibrary...
    Et on charge directement le jar via l'appel de la méthode gdal.AllRegister();
    et là : java.lang.UnsatisfiedLinkError: D:\.......xxxxxxx......03-source\lib\gdaljni.dll: Can't find dependent libraries

    En effet, le programme charge gdal.jar qui lui a besoin des dlls. Les dlls sont chargée d'abord dans le CurrentWorkingDirectory qui n'est pas "lib" mais le répertoire racine du projet, résultat il trouve pas les dépendances.

    -> Recherche de solution. A priory changer le current working directory ne peut pas être fait en java.
    -> placer toutes mes dlls, mes .jar et tout le toutim à la racine du projet histoire que ce soit bien crade (sinon ça marche super bien).
    -> Appeler la JVM avec -cp "D:\......\03-source\lib"
    -> Appeler la JVM avec -Djava.class.path="D:\.......\03-source\lib"

    Rien ne fonctionne si les dlls (et le gdal.jar) sont situés dans le répertoire lib.
    La seule façon que j'ai trouvée c'est sous Eclipse, modifier le Working Directory (on en revient toujours à celui-là).
    Et visiblement impossible de le faire dans le programme.

    Surtout que les chemins, une fois déployé chez le client ne sont plus les mêmes et le .jar est encapsulé dans un exécutable avec launch4j (j'en suis pas là).

    Voilà, ce problème devrait être classique mais impossible de trouver une solution propre permettant par exemple de changer le current working folder par programme ou modifier le classpath qui modifie en fait le PATH interne où le .jar va pouvoir aller chercher ses dépendances...

    Vous avez une idée ?

  2. #2
    Membre confirmé

    Inscrit en
    Février 2007
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Février 2007
    Messages : 253
    Par défaut
    Il n'y a QUE en changeant le répertoire courant avant de lancer la JVM qui marche, c'est tout simplement incroyable !
    Avec lauch4j on a cette option aussi, donc ça marche mais ça fait bidouille !
    Il faudrait pas avoir besoin d'un répertoire lib1 et lib2 parce que ce serait tout simplement impossible !

+ 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. Réponses: 7
    Dernier message: 02/02/2011, 18h22
  3. Réponses: 6
    Dernier message: 22/10/2009, 12h17
  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