Y compris la bibliothèque native c ++ .so dans IntelliJ utilisant JNI sous Ubuntu

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éthode System.loadLibrary .