java loadlibrary_java – System.loadLibrary不起作用.链中的第二个lib的UnsatisfiedLinkError...
我有通過JNI使用cpp共享庫libclient.so的
java程序Client.class.
libclient.so構建為共享并使用cpp共享庫libhttp.so.
libclient.so和libhttp.so放在文件夾/ home / client / lib64中
Client.class放在/ home / client / bin中
客戶端可以加載庫
> System.load和環境變量LD_LIBRARY_PATH
> System.loadLibrary和-Djava.library.path
第一種方式很好.
export LD_LIBRARY_PATH = / home / client / lib64
java -classpath ./bin客戶端
secon方式失敗了.
java -classpath ./bin -Djava.library.path =./ .. / lib64客戶端
java.lang.UnsatisfiedLinkError: /home/client/lib64/libclient.so: libhttp.so: cannot open shared object file: No such file or directory
當我將libhttp.so放入/usr/lib64時,第二種方式可以正常工作.
如果我使用System.loadLibrary,為什么libclient.so在/usr/lib64中尋找libhttp.so?
如何在不將libhttp.so復制到/usr/lib64的情況下修復它?
我的加載代碼:
//Try load from -Djava.library.path
boolean found = false;
String lib = "client";
try {
System.loadLibrary(lib);
found = true;
} catch (UnsatisfiedLinkError e) {
e.printStackTrace();
}
//Try load from LD_LIBRARY_PATH
if (!found) {
lib = "libclient.so";
String ld_lib_path = System.getenv("LD_LIBRARY_PATH");
String[] paths = ld_lib_path.split(":");
for(int i=0; i
String p = paths[i];
File x = new File(p, lib);
if (x.exists()) {
System.load(x.getAbsolutePath());
found = true;
break;
}
}
}
附加信息.
如果我用ldd測試libclient.so,那么我看到:libhttp.so =>未找到
如果我設置export LD_LIBRARY_PATH = / home / client / lib64,那么我看到:libhttp.so => /home/client/lib64/libhttp.so
總結
以上是生活随笔為你收集整理的java loadlibrary_java – System.loadLibrary不起作用.链中的第二个lib的UnsatisfiedLinkError...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 亚马逊kindle设置_亚马逊的新款Ki
- 下一篇: html鼠标移动图片自动放大,当鼠标移动