Je participe au développement d'un projet Java, qui utilise des composants C++. J'ai donc besoin de Jacob.dll. (sous Windows 7)
Je continue à obtenir Java.lang.UnsatisfiedLinkError: no JacobDB in Java.library.path
peu importe où je mets Jacob.dll ....
J'ai cherché des décisions possibles et celle que je n'ai pas encore essayée définit la variable LD_LIBRARY_PATH, en pointant sur le fichier .dll.
J'ai peu d'expérience et je ne connais pas bien le sens et l'utilisation de cette variable. Pouvez-vous m'aider?
En règle générale, vous devez définir Java.library.path
sur la ligne de commande de la machine virtuelle:
Java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass
LD_LIBRARY_PATH
est la variable d'environnement prédéfinie sous Linux/Unix qui définit le chemin d'accès que doit utiliser l'éditeur de liens lors de la liaison de bibliothèques dynamiques/partagées.
LD_LIBRARY_PATH
contient une liste de chemins séparés par des points-virgules et l'éditeur de liens donne la priorité à ces chemins par rapport aux chemins de bibliothèque standard /lib
et /usr/lib
. Les chemins standard seront toujours recherchés, mais seulement après que la liste des chemins dans LD_LIBRARY_PATH
aura été épuisée.
La meilleure façon d'utiliser LD_LIBRARY_PATH
consiste à le définir sur la ligne de commande ou le script immédiatement avant l'exécution du programme. De cette façon, le nouveau LD_LIBRARY_PATH
est isolé du reste de votre système.
Exemple d'utilisation:
$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path"
$ ./program
Puisque vous parlez de .dll
, vous êtes sur un système Windows et qu'un .dll
doit être placé sur un chemin que l'éditeur de liens recherche au moment du lien. Dans Windows, ce chemin est défini par la variable d'environnement PATH
, ajoutez donc .dll
à PATH
et il devrait fonctionner. bien.
LD_LIBRARY_PATH est spécifique à Linux et est une variable d’environnement pointant vers des répertoires dans lesquels le chargeur dynamique doit rechercher des bibliothèques partagées.
Essayez d'ajouter le répertoire où se trouve votre .dll dans la variable PATH. Windows va automatiquement rechercher dans les répertoires listet dans cette variable d'environnement. LD_LIBRARY_PATH ne résoudra probablement pas le problème (à moins que la machine virtuelle ne l'utilise - je ne le sais pas).
LD_LIBRARY_PATH
est le chemin d'accès par défaut à la bibliothèque pour rechercher les bibliothèques dynamiques et partagées disponibles. C'est spécifique aux distributions linux.
C'est similaire à la variable d'environnement PATH
dans Windows que l'éditeur de liens vérifie les implémentations possibles pendant le temps de liaison.
Eh bien, le message d'erreur vous dit quoi faire: ajoutez le chemin où Jacob.dll réside à Java.library.path. Vous pouvez le faire sur la ligne de commande comme ceci:
Java -Djava.library.path="dlls" ...
(en supposant que Jacob.dll se trouve dans le dossier "dlls")
Voir aussi Java.lang.UnsatisfiedLinkError no *****. Dll dans Java.library.path
Mon erreur était également liée au fait de ne pas trouver le fichier .so
requis par un service . J'ai utilisé la variable LD_LIBRARY_PATH
pour prioriser le chemin emprunté par l'éditeur de liens afin de rechercher la bibliothèque requise.
J'ai copié à la fois le service et le fichier .so
dans un dossier et l'ai alimenté dans la variable LD_LIBRARY_PATH
en tant que
LD_LIBRARY_PATH=. ./service
étant dans le même dossier, j'ai donné la commande ci-dessus et cela a fonctionné.