Posted on 2012-12-06 11:05
Milo的海域 閱讀(6872)
評(píng)論(0) 編輯 收藏 所屬分類:
Java
最近項(xiàng)目要用JNI, 涉及到用java.library.path這個(gè)參數(shù),開始以為只要ldconfig能識(shí)別到的so文件java 一定能找到,可惜并不是這樣。。
要想java程序找到共享庫(kù)還是要在執(zhí)行java程序的時(shí)候指定java.library.path,用eclipse的話可以設(shè)置如下:
Properties->Run/Debug settings->Arguments->VM arguments
-----------------------------------------
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
這個(gè)是傳統(tǒng)的方式,google了下有個(gè)tricky的方式讓程序動(dòng)態(tài)修改java.library.path
private static void loadJNILibDynamically() {
try {
System.setProperty("java.library.path", System.getProperty("java.library.path")
+ ":/home/miaoyachun/workspace/JNIC/Release/");
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
System.loadLibrary("JNIC");
} catch (Exception e) {
// do nothing for exception
}
}
事實(shí)上linux下還有個(gè)環(huán)境變量LD_LIBRARY_PATH,如果lib能在這個(gè)path里找到,java.library.path就不用配置了,而且不需要關(guān)心lib之間依賴的問題。java.library.path在這方面就弱很多,比如lib依賴其他目錄的lib等。