Je construis une bibliothèque partagée qui sera appelée depuis Java IntelliJ en utilisant JNI sous Ubuntu 14.04 x64. Lors de l’appel de mon fichier .so à l’aide de System.loadLibrary("libtestJniLib")
dans Intellij, j’ai reçu l’erreur suivante:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libtestJniLib in java.library.path
Les configurations Intellij déterminent le chemin d’access à la bibliothèque:
1) Run->Edit Configurations->VM options: -Djava.library.path=/home/username/Libs 2) In "Project structure -> Libraries ->Native library locations"
J’ai ajouté le même chemin: /home/username/Libs
En testant en utilisant la méthode mentionnée ci-dessous, j’ai un chemin correct.
Ssortingng javaLibPath = System.getProperty("java.library.path");
IntelliJ a commencé sous root.
Lorsque vous chargez une bibliothèque partagée à l’aide de System.LoadLibrary()
, ce qui suit s’applique:
Charge la bibliothèque système spécifiée par l’argument libname. La manière dont un nom de bibliothèque est mappé à la bibliothèque système réelle dépend du système.
La meilleure description que je puisse trouver pour cette cartographie est la suivante:
Chaque environnement d’exécution Java fournit un mécanisme dépendant de la plate-forme pour le mappage entre le nom de fichier réel d’une bibliothèque partagée et la chaîne de nom que vous transmettez en tant qu’argument à la méthode System.loadLibrary.
Solaris:
Le nom du fichier de bibliothèque partagé nécessite un préfixe “lib” et une extension “.so”. N’incluez pas le préfixe “lib” ou l’extension “.so” pour l’argument que vous transmettez à la méthode
System.loadLibrary
.Microsoft Windows:
Le nom du fichier de bibliothèque partagé nécessite une extension “.dll”.
N’incluez pas l’extension “.dll” pour l’argument de méthodeSystem.loadLibrary
.