如何在代码中动态设置java_library_path?

在使用Java JNI的时候,往往需要在程序启动前设定"java.library.path" 

1. 在终端情况下,java -Djava.library.path=/path/to/libs

2. 在IDE情况下,如Eclipse: Project->Properites->Java Build Path -> Source, 然后设定Native library location

注意:之后改变system properties,没有效果, 因为当程序启动时,已经缓存了system properties, 程序每次读取的属性都来自这个缓存。

System.setProperty( "java.library.path", "/path/to/libs" ); 
Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

解释:

Classloader有一个叫做"sys_paths"的静态属性, 它包含了system properties的路径 (这个路径被赋值当程序启动的时候)。我要这里要做的就是,把这个属性置空, 这样当我们调用loadLibrary的时候, 因为system properties"没有被初始化", Classloader就会把我们的期望的路径("/path/to/libs")设定成功啦


本文翻译出处 点击打开链接






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值