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}"
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) ...
Je pense que le meilleur moyen est:
C'est tout. Vous n'avez pas besoin de modifier manuellement quoi que ce soit dans la configuration.
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.