posts - 88, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          關于java.library.path

          Posted on 2012-12-06 11:05 Milo的海域 閱讀(6869) 評論(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等。
          主站蜘蛛池模板: 汽车| 合江县| 湄潭县| 兰西县| 吉安市| 连云港市| 张家口市| 鄯善县| 阿鲁科尔沁旗| 象山县| 枣阳市| 如东县| 黄龙县| 大港区| 普陀区| 原阳县| 西平县| 巴彦淖尔市| 增城市| 土默特左旗| 安仁县| 榆树市| 汽车| 芒康县| 巴东县| 芦山县| 贞丰县| 荔浦县| 葵青区| 辰溪县| 耿马| 濉溪县| 荣昌县| 石楼县| 高台县| 兴隆县| 宁阳县| 澄迈县| 始兴县| 英山县| 商水县|