最近项目要用JNI, 涉及到用java.library.path这个参数,开始以为只要ldconfig能识别到的so文件java 一定能找到,可惜并不是这样。。
要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:
这个是传统的方式,google了下有个tricky的方式让程序动态修改java.library.path
要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:
Properties->Run/Debug settings->Arguments->VM arguments
-----------------------------------------
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
-----------------------------------------
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
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
}
}
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
}
}