2016-08-09 118 views
0

我的Java應用程序使用JNI來訪問一些C++本機代碼。我需要特別是這個庫symbolic_graph_jni(由我寫的),需要glog(谷歌)。我確認libsymbolic_graph_jni.so取決於libglog.so.0。下面是依賴於LDD結構:-Djava.library.path woes

|1276|lib>ldd libsymbolic_graph_jni.so 
.... 
libcommon.so => not found 
libstorage.so => not found 
libdatabase.so => not found 
linux-vdso.so.1 => (0x00007fff9d5ff000) 
libglog.so.0 => not found 
.... 
在我的Java應用程序

,雖然我設置:

-Djava.library.path=~/myproduct/build/impl/libs 

,而該目錄包含:

-rwxr-xr-x 1 mldv eng 18389 Aug 9 08:54 libboost_system.so.1.58.0 
-rwxr-xr-x 1 mldv eng 3141033 Aug 9 08:54 libcommon.so 
-rwxr-xr-x 1 mldv eng 47034505 Aug 9 08:54 libdatabase.so 
-rw-r--r-- 1 mldv eng 528031 Aug 9 08:54 libgcc_s.so.1 
-rwxrwxrwx 1 mldv eng 1451910 Aug 9 08:54 libgflags.so.2 
-rwxrwxrwx 1 mldv eng 873073 Aug 9 08:54 libglog.so.0 
-rwxrwxrwx 1 mldv eng 6520243 Aug 9 08:54 libstdc++.so.6 
-rwxr-xr-x 1 mldv eng 8060525 Aug 9 08:54 libstorage.so 
-rwxr-xr-x 1 mldv eng 1818771 Aug 9 08:54 libsymbolic_graph_jni.so 
-rwxr-xr-x 1 mldv eng 154808 Aug 9 08:54 libutil.so 

我總是:

java.lang.UnsatisfiedLinkError: ~/myproduct/build/impl/libs/libsymbolic_graph_jni.so: libglog.so.0: cannot open shared object file: No such file or directory 

換句話說,用-Djava.library.path設置,我的Java頁面找到libsymbolic_graph_jni.so,但是沒有找到該頁面依賴的glog.so.0,,它位於同一個目錄中!

什麼給?我有一個目錄中的所有共享庫,我需要做什麼才能讓Java類加載器找到它們?

+0

java.library.path看起來像一個Java屬性。那麼爲什麼你認爲這個設置對使用系統路徑查找本地庫的ldd工具有影響? – GhostCat

+0

@GhostCat - 我改述了 - 我只用ldd來查找依賴關係。問題在於我的Java應用程序找不到glog,儘管它找到了libsymbolic_graph_jni。 – Frank

+0

如何在你的java應用程序中調用/加載libsymbolic_graph_jni.so,可以在這裏粘貼代碼 – kuhajeyan

回答

0

開始嘗試你java應用(假設你是在Linux上):

1)export LD_LIBRARY_PATH=<path-containing-so's>(見here

2)java MainClass

的-D屬性隻影響其中JVM查找本地庫。