我需要在我的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
答案 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");
并告诉我们会发生什么。