2011-04-20 90 views
0

我需要一些本地C++代碼在我的Java應用程序中被調用,所以我使用'System.loadLibrary(字符串)」所要求的.so文件加載,但是當我試圖執行從Eclipse的Java應用程序我得到這個錯誤信息:[Linux]爲JNI加載.so文件導致:java.lang.UnsatisfiedLinkError:java.library.path中沒有libdebug

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

如果用'java -Djava.library.path =/home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/org.server.Server'手動運行,你還是會得到'UnsatisfiedLinkError' ? – 2011-04-20 21:31:56

+0

是的,我願意。 riijgjweg(< - 抱歉必須符合最小字符限制:O) – Benjamin 2011-04-20 21:39:11

+0

如果切換到'System.load(「/ home/benjamin/Downloads/jdk1.6.0_24/jre/lib/i386/libdebug.so」)會怎樣? '?那樣有用嗎? – 2011-04-20 21:49:08

回答

2

如果調用System.loadLibrary("foo")那麼JVM將查找共享庫的調用Windows libfoo.so在Unix和foo.dll

您正在根據該連接線調用共享庫Debug.so.1.0

嘗試重命名你的庫libDebug.so(或使一個符號鏈接從Debug.so.1.0libDebug.so),然後改變源代碼行System.loadLibrary("Debug");,告訴我們發生了什麼。

0

嘗試使用-lstdC++而不是-lc鏈接。

相關問題