繁体   English   中英

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

[英][Linux]Load .so file for JNI results in: java.lang.UnsatisfiedLinkError: no libdebug in java.library.path

我需要在我的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

如果您调用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"); 并告诉我们会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM