java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能載入DLL動態庫問題

來源:互聯網
上載者:User

 java.lang.UnsatisfiedLinkError: Can not load XXX library ... JNA不能載入DLL動態庫問題

1, 版本問題。

版本一定要對應。

64位系統,對應64的jdk或者jre,同時對應動態庫也需要64位的。

32位也是如此對應。

 

如果機器上裝了兩套jre或jdk, 例如同時裝了32和64的jre, 需要將本機啟動並執行jre設定為64的版本,具體為控制台的java 控制台中設定對應的java版本。

 點擊Java,查看,進行尋找和添加等操作。確保64位的啟用。


 

 

2,路徑問題。

1:使用JNA 載入dll你首先需要下載JNA.jar,這個jar檔案可以在sun官網下載到。

2:dllName這個地方只能是dll的名字,不能加".dll"這個是為了跨平台。

 使用JNA通常會遇到不能載入的問題,這一般是應為dll檔案沒有放在正確的位置導致的。

     

 

路徑可以設定為絕對路徑或相對路徑。

絕對路徑:

TestDll1 INSTANCE = (TestDll1)Native.loadLibrary("D:\\test\\TestDll1", TestDll1.class);

然後DLL放到D盤下面test檔案夾下。

 

相對路徑:

在web服務中,可以放到WEB-INF下res檔案夾下

  String realPath = ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("WEB-INF/res/TestDll1.dll");   String path =realPath.substring(0,realPath.length()-4);  TestDll1 INSTANCE = (TestDll1)Native.loadLibrary( path, TestDll1.class);

 PS :跨平台的寫法

通常我們在使用JNA的時候會使用下面的方式(假設DLL名為helloDll.dll)

interface HelloDll extends Library {   TestDll1 INSTANCE = (TestDll1 )Native.loadLibrary("driver/TestDll1 ", TestDll1 .class);   public void hello();}

1.  在這種情況下,我們需要將 TestDll1 這個檔案拷貝到 driver 目錄下。

2. 同時為了跨平台,相對路徑應該這麼寫:

"driver" + File.separator + "TestDll1 "

3. 另外,如果TestDll1 .dll依賴其他包的話,也要將包拷貝到driver目錄下或是系統路徑。查看dll依賴關係的工具很多,google一下就行了。

  

參考:

經過上述步驟,基本可以解決,如果還不行,參考如下步驟:

 1:dll檔案要放到項目路徑下;

  2:把dll檔案放到庫檔案路徑下,執行這句代碼 System.out.println(System.getProperty("java.library.path"));

       然後把dll檔案copy到任意一個路徑下

  3:dll名字好像不能帶有“_”(這個是我自己遇到的一個問題,僅供參考)

 

注意到這三點基本可以解決使用JNA載入C++,Delphi,C的dll的所有問題了。

連結:

http://blog.sina.com.cn/s/blog_b7c09bc00101d2sk.html

http://blog.csdn.net/zhhniyniy/article/details/7968752

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.