[Linux]为JNI加载.so文件导致:java.lang.UnsatisfiedLinkError:java.library.path中没有libdebug

时间:2011-04-20 21:22:04

标签: java c++ linux java-native-interface

我需要在我的Java应用程序中调用一些本机C ++代码,因此我使用'System.loadLibrary(String)'来加载所需的.so文件,但是当我尝试从Eclipse执行Java应用程序时,我收到此错误消息:

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

1 个答案:

答案 0 :(得分:2)

如果你打电话给System.loadLibrary("foo"),那么JVM将在Unix上寻找一个名为libfoo.so的共享库,在Windows上寻找foo.dll

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

尝试将您的库重命名为libDebug.so(或从Debug.so.1.0创建符号链接到libDebug.so),然后将源代码行更改为System.loadLibrary("Debug");并告诉我们会发生什么。