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

          關(guān)于java.library.path

          Posted on 2012-12-06 11:05 Milo的海域 閱讀(6870) 評論(0)  編輯  收藏 所屬分類: Java
          最近項目要用JNI, 涉及到用java.library.path這個參數(shù),開始以為只要ldconfig能識別到的so文件java 一定能找到,可惜并不是這樣。。
          要想java程序找到共享庫還是要在執(zhí)行java程序的時候指定java.library.path,用eclipse的話可以設(shè)置如下:
          Properties->Run/Debug settings->Arguments->VM arguments
          -----------------------------------------
          -Djava.library.path=/home/miaoyachun/workspace/JNIC/Release
          這個是傳統(tǒng)的方式,google了下有個tricky的方式讓程序動態(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(
          nullnull);

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

          事實上linux下還有個環(huán)境變量LD_LIBRARY_PATH,如果lib能在這個path里找到,java.library.path就不用配置了,而且不需要關(guān)心lib之間依賴的問題。java.library.path在這方面就弱很多,比如lib依賴其他目錄的lib等。
          主站蜘蛛池模板: 衡阳市| 四会市| 邵武市| 平原县| 瑞金市| 桓仁| 贵溪市| 云阳县| 武山县| 那坡县| 阿合奇县| 寿宁县| 淮北市| 汝南县| 宜章县| 大关县| 喜德县| 阳江市| 南昌县| 桓台县| 天台县| 柳林县| 静乐县| 靖州| 宜川县| 紫金县| 伊金霍洛旗| 肇源县| 陇川县| 启东市| 元朗区| 双柏县| 江源县| 同德县| 德化县| 永胜县| 鄯善县| 淮滨县| 祥云县| 临潭县| 三都|