在Ubuntu下使用JNI在IntelliJ中包含本机c ++ .so库

时间:2015-10-22 13:12:17

标签: java ubuntu intellij-idea java-native-interface

我正在构建一个共享库,它将在Ubuntu 14.04 x64下使用JNI从Java IntelliJ调用。 在Intellij中使用System.loadLibrary("libtestJniLib")调用我的.so文件时出现以下错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no
libtestJniLib in java.library.path

Intellij配置确定库的路径:

1) Run->Edit Configurations->VM options: -Djava.library.path=/home/username/Libs
2) In "Project structure -> Libraries ->Native library locations"

我添加了相同的路径:/home/username/Libs

使用下面提到的方法测试时,我有一个正确的路径。

String javaLibPath = System.getProperty("java.library.path");

IntelliJ是在root下开始的。

1 个答案:

答案 0 :(得分:2)

使用System.LoadLibrary()加载共享库时,以下内容适用:

  

加载libname参数指定的系统库。 方式   其中库名称映射到实际系统库是   系统依赖。

我可以找到该映射的最佳描述是here

  

每个Java运行时环境都提供了一种依赖于平台的机制   用于在共享库的实际文件名和。之间进行映射   您作为参数传递给System.loadLibrary的名称字符串   方法

     

的Solaris:

     

共享库文件名需要“lib”前缀和“.so”   延期。不要包含“lib”前缀或“.so”扩展名   您传递给System.loadLibrary方法的参数。

     

Microsoft Windows:

     

共享库文件名需要“.dll”扩展名   不要包含System.loadLibrary方法的“.dll”扩展名   参数。