簡體   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