我的Java应用程序使用JNI访问某些C ++本机代码。我特别需要这个库symbolic_graph_jni(由我编写),它需要glog(来自google)。我确认libsymbolic_graph_jni.so取决于libglog.so.0。这是ldd中依赖项的结构:
|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 pp找到libsymbolic_graph_jni.so,但是找不到该lib所依赖的glog.so.0,并且该glog.so.0在同一目录中!
是什么赋予了?我将所有共享库都放在一个目录中,要让Java类加载器找到它们,该怎么办?
最佳答案
尝试启动您的java
应用程序(假设您使用的是Linux):
1)export LD_LIBRARY_PATH=<path-containing-so's>
(请参阅here。
2)java MainClass
-D属性仅影响JVM在哪里寻找本机库。
关于java - -Djava.library.path问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38856409/