Ubuntu中的java.lang.UnsatisfiedLinkError

时间:2012-06-13 07:27:58

标签: java java-native-interface

我见过很多人在SO中发布这个问题。我已经浏览了这些帖子并尝试了建议的方法,但遗憾的是无法帮助我解决问题。

这是我的问题:

public class runme {
  static {
    System.loadLibrary("example");
  }

  public static void main(String argv[]) {
    System.out.println(example.fact(4));


  }
}

错误:

anu@anu-desktop:~/Desktop/swigtest/new$ java runme
Exception in thread "main" java.lang.UnsatisfiedLinkError: no example in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681)
    at java.lang.Runtime.loadLibrary0(Runtime.java:840)
    at java.lang.System.loadLibrary(System.java:1047)
    at runme.<clinit>(runme.java:5)
    Could not find the main class: runme. Program will exit.

示例库与 runme.java 位于同一路径中。为什么我会收到此错误?我在Ubuntu OS工作。

非常感谢能帮助我解决这个问题的任何帮助。

编辑:

我已附上我的档案here

5 个答案:

答案 0 :(得分:1)

您必须设置java.library.path属性以包含库的路径。或者将其复制到路径中已有的位置。

答案 1 :(得分:1)

即使docs库名称映射到实际系统库的方式依赖于系统,根据我的经验loadLibrary的相对路径指的是工作目录(之后它会检查所有其他已定义和系统相关的路径)。

如果不确定工作目录,请检查System.getProperty("user.dir")返回的内容。

答案 2 :(得分:1)

尝试运行您的程序:

$> java -Djava.library.path=/path/to/my/libs runme

应将/path/to/my/libs更改为您确实拥有.so个文件的位置。


修改

我在我的虚拟Ubuntu计算机上安装了openjdk-6-jdk以查看包含文件的位置。

试试这个来获取libexample.so

$> gcc -fPIC -g -c -Wall example_wrap.c -I/usr/lib/jvm/java-6-openjdk/include -I/usr/lib/jvm/java-6-openjdk/include/linux
$> gcc -shared -o libexample.so example_wrap.o

然后检查文件是否已创建......

现在你只需要打电话

$> java runme

如果-Djava.library.path文件位于工作目录中,则不需要.so

答案 3 :(得分:0)

我在Ubuntu上遇到了这个问题并使用bat文件解决了它

export LD_LIBRARY_PATH=$PWD/lib/linux32
./fiji-linux

需要设置的对象是LD_LIBRARY_PATH,我通过添加/ lib / linux32将其设置为本地目录。下一行是我的程序。

答案 4 :(得分:0)

您需要将共享库的路径添加/附加到LD_LIBRARY_PATH,如:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_folder_where_your_shared_library_is