posts - 88, comments - 3, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于java.library.path

Posted on 2012-12-06 11:05 Milo的海域 阅读(6840) 评论(0)  编辑  收藏 所属分类: Java
最近项目要用JNI, 涉及到用java.library.path这个参数,开始以为只要ldconfig能识别到的so文件java 一定能找到,可惜并不是这样。。
要想java程序找到共享库还是要在执行java程序的时候指定java.library.path,用eclipse的话可以设置如下:
Properties->Run/Debug settings->Arguments->VM arguments
-----------------------------------------
-Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
这个是传统的方式,google了下有个tricky的方式让程序动态修改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(
nullnull);

            System.loadLibrary(
"JNIC");
        } 
catch (Exception e) {
            
// do nothing for exception
        }
    }

事实上linux下还有个环境变量LD_LIBRARY_PATH,如果lib能在这个path里找到,java.library.path就不用配置了,而且不需要关心lib之间依赖的问题。java.library.path在这方面就弱很多,比如lib依赖其他目录的lib等。

只有注册用户登录后才能发表评论。


网站导航: