web-dev-qa-db-fra.com

Ajoutez .dll à Java.library.path dans le projet Jython Eclipse/PyDev

J'essaie d'utiliser une bibliothèque Java compilée .jar dans mon projet PyDev Jython.

J'ai ajouté avec succès le .jar à PYTHONPATH et j'ai pu commencer à coder avec l'auto-complétion.

La bibliothèque nécessite également une extension .dll, javaHeclib.dll. Je l'ai donc ajoutée à la section External Libs de mon projet.

Je peux importer la bibliothèque correctement, mais un message d'erreur s'affiche lorsque j'essaie d'accéder à l'une de ses fonctions:

Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

J'ai ajouté un argument VM à ma configuration d'exécution, sans succès:

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"

Je peux très bien utiliser la bibliothèque à partir de la ligne de commande en utilisant le Java.library.path ci-dessus.

En expérimentant dans la console PyDev, j'ai remarqué que je pouvais charger l'extension .dll avec un chemin absolu, mais pas relatif:

>>> import Java.lang
>>> Java.lang.System.load('Y:/path/to/javaHeclib.dll')
>>> Java.lang.System.loadLibrary('javaHeclib')
Traceback (most recent call last):
  File "<console>", line 1, in ?
Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

Malheureusement, la bibliothèque utilise l'appel System.loadLibrary ci-dessus et je n'ai pas accès à sa source.

Pourquoi javaHeclib.dll ne figure-t-il pas dans mon Java.library.path?

MODIFIER

Définir le Java.library.path dans le répertoire contenant la dll ne me permettait pas de le charger avec System.loadLibrary.

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"

(L'utilisation de barres obliques n'a pas fait de différence.) J'ai également essayé de modifier les arguments VM par défaut dans Eclipse.ini, sans succès:

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
17
Robbie Rosati

Je travaille ça.

Pour référence future:

Dites que la DLL dont vous avez besoin est dans Y:\path\to\dlls\lib\. Définissez ensuite le répertoire de travail de votre configuration d'exécution sur Y:\path\to\dlls\ et définissez vos arguments VM pour inclure -Djava.library.path=lib.

Ça y est, cela devrait maintenant fonctionner. Je ne sais pas pourquoi la spécification d'un chemin absolu dans Java.library.path ne fonctionnait pas auparavant, mais la définition d'un répertoire de travail semble l'avoir fait. 

C'est peut-être quelque chose de particulier à la bibliothèque que j'utilise (ou qu'Eclipse fonctionne à partir d'un lecteur différent de celui de la bibliothèque) ...

8
Robbie Rosati

Je pense que le meilleur moyen est:

  1. Créez un dossier sous le projet, par exemple dll.
  2. Copiez/collez tous les fichiers dll dans ce dossier.
  3. Dans projet -> Propriétés -> Chemin de construction Java -> Source, cliquez sur et développez les détails de la source. 
  4. Vous verrez l'emplacement de la bibliothèque native, cliquez/mettez-le en surbrillance. 
  5. Cliquez ensuite sur modifier à droite, cliquez à nouveau sur l’espace de travail. Vous pouvez voir le dossier dll sous le projet. 
  6. Sélectionnez-le et cliquez sur OK, OK. Vous verrez que la dll est ajoutée à l'emplacement de la bibliothèque native.

C'est tout. Vous n'avez pas besoin de modifier manuellement quoi que ce soit dans la configuration.

43
Wayne

J'ai eu le même problème, mais avec Ghost Script dll. Même si on suivait en plaçant les fichiers dans le répertoire de travail et en suivant les instructions, cela ne fonctionnait pas pour moi, référez-vous à la balise Ghost4J. Java.lang.UnsatisfiedLinkError: impossible de charger la bibliothèque 'gsdll64' et utilisait l'option -Djna.library.path pour que cela fonctionne.

0
Jeya Venkatesh