我需要在我的 Java 应用程序中调用一些 native 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
的共享库和 foo.dll
在 Windows 上。
您正在根据该链接行调用您的共享库 Debug.so.1.0
。
尝试将您的库重命名为 libDebug.so
(或创建一个从 Debug.so.1.0
到 libDebug.so
的符号链接(symbolic link)),然后将源代码行更改为 System.loadLibrary("Debug");
并告诉我们发生了什么。
关于java - [Linux] 为 JNI 加载 .so 文件导致 : java. lang.UnsatisfiedLinkError : no libdebug in java. library.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736796/