java - [Linux] 为 JNI 加载 .so 文件导致 : java. lang.UnsatisfiedLinkError : no libdebug in java. library.path

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

我需要在我的 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.0libDebug.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/

相关文章:

c++ - 从引用创建 shared_ptr

c++ - 如何将现有代码/位图分配给 MFC

php - UTF-8贯穿始终

java - 在 Win XP 上使用 BufferedReader 双换行,但在其他操作系统上没有...相同的代码

java - @JsonProperty Json对象里面的Json对象

类似sql语法的C++对象过滤引擎

c++ - 为什么 Linux NETLINK 手册页提供了 C++ 示例而不提供 C 示例?

java - 如何显示数组中元素的位置?

java - 使用 lombok @Singular 和 jackson @JsonPOJOBuilder

linux - smtp配置位于solaris中的位置