我见过很多人在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
答案 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