web-dev-qa-db-fra.com

Qu'est-ce que LD_LIBRARY_PATH et comment l'utiliser?

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?

30
karla

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
26
Henning Makholm

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.

44
Alok Save

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).

7
Markus Pilman

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.

1
Shrikanth N

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

1
daniel kullmann

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é.

0
anurag singh