2011-04-20 125 views
0

我需要一些本地C++代码在我的Java应用程序中被调用,所以我使用'System.loadLibrary(字符串)”所要求的.so文件加载,但是当我试图执行从Eclipse的Java应用程序我得到这个错误信息:[Linux]为JNI加载.so文件导致:java.lang.UnsatisfiedLinkError:java.library.path中没有libdebug

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libdebug in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
    at java.lang.System.loadLibrary(System.java:1028) 
    at org.server.util.Debug.<clinit>(Debug.java:5) 
    at org.server.Server.main(Server.java:18) 

库路径属性设置为:

java.library.path="/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/client:/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386" 

而且我将libdebug.so放入/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/。 的.so文件编译如下:

g++ -I /home/benjamin/Downloads/jdk1.6.0_24/include 
    -I /home/benjamin/Downloads/jdk1.6.0_24/include/linux -fPIC -c debug.cpp 
    -o /home/benjamin/workspace/server/bin/linux-x86/debug.o 

和链接是这样的:

ld -shared -soname Debug.so.1 -o Debug.so.1.0 -lc debug.o 
+0

如果用'java -Djava.library.path =/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/org.server.Server'手动运行,你还是会得到'UnsatisfiedLinkError' ? – 2011-04-20 21:31:56

+0

是的,我愿意。 riijgjweg(< - 抱歉必须符合最小字符限制:O) – Benjamin 2011-04-20 21:39:11

+0

如果切换到'System.load(“/ home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/libdebug.so”)会怎样? '?那样有用吗? – 2011-04-20 21:49:08

回答

2

如果调用System.loadLibrary("foo")那么JVM将查找共享库的调用Windows libfoo.so在Unix和foo.dll

您正在根据该连接线调用共享库Debug.so.1.0

尝试重命名你的库libDebug.so(或使一个符号链接从Debug.so.1.0libDebug.so),然后改变源代码行System.loadLibrary("Debug");,告诉我们发生了什么。

0

尝试使用-lstdC++而不是-lc链接。

相关问题