2

我已经看到很多人在 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 操作系统。

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

编辑:

我已在此处附加我的文件

4

5 回答 5

1

尝试像这样运行您的程序:

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

/path/to/my/libs应将何处更改为您真正拥有.so文件的位置。


编辑

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

试试这个来得到你的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

于 2012-06-13T07:56:59.917 回答
1

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

于 2012-06-13T07:36:36.473 回答
1

尽管文档库名称映射到实际系统库的方式是系统相关的,但根据我的经验loadLibrary,相对路径指的是工作目录(之后它会检查所有其他定义的和系统相关的路径) .

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

于 2012-06-13T07:36:47.453 回答
0

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

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

需要设置的对象是LD_LIBRARY_PATH,我把它设置为本地目录,加上/lib/linux32。下一行运行我的程序。

于 2012-06-13T07:42:48.110 回答
0

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

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_folder_where_your_shared_library_is
于 2012-06-13T12:49:15.967 回答