Java JNA加载DLL

时间:2016-10-11 06:12:45

标签: java java-native-interface jna

当我尝试加载这样的DLL时遇到问题:

String a = "C:\\Users\\ElteGps 022\\Documents\\NetBeansProjects\\JavaApplication1\\src\\lib\\EQ2008_Dll.dll";
        String strDllFileName = m_strUserPath + "\\res\\EQ2008_Dll.dll";
        String strEQ2008_Dll_Set_Path = m_strUserPath + "\\res\\EQ2008_Dll_Set.ini";
        m_DllLibrary = (DllLibrary) Native.loadLibrary(a,DllLibrary.class);

我明白这一点:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'C:\Users\ElteGps 022\Documents\NetBeansProjects\JavaApplication1\src\lib\EQ2008_Dll.dll': Nie mo¿na odnaleæ okrelonego modu³
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
    at com.sun.jna.Library$Handler.<init>(Library.java:140)
    at com.sun.jna.Native.loadLibrary(Native.java:379)
    at com.sun.jna.Native.loadLibrary(Native.java:364)
    at javaapplication1.Fun.main(Fun.java:280)

我读了,我这样做了:

1 个答案:

答案 0 :(得分:3)

来自JNA javadoc

  图书馆搜索路径   搜索给定的库将扫描以下位置:   

  1. jna.library.path用户可自定义的路径   
  2. jna.platform.library.path特定于平台   路径
  3. 在OSX上,~/Library/Frameworks,   /Library/Frameworks,和   我会搜索/System/Library/Frameworks   具有与所请求的名称对应的名称的框架。绝对   框架的路径也被接受,或者以框架结束   name(无“.framework”)或共享框架的完整路径   库(例如CoreServices.framework / CoreServices)。   
  4. Context类加载器类路径。部署本机库   可以安装在类路径下   ${os-prefix}/LIBRARY_FILENAME,在哪里   ${os-prefix}Platform.getNativeLibraryResourcePrefix()返回的OS / Arch前缀。   如果捆绑在jar文件中,则将资源提取到   jna.tmpdir用于加载,后来被删除(但仅限于   jna.nounpack是假的或未设置)。
你可以   设置系统属性jna.debug_load=true以生成JNA   将其库搜索的步骤打印到控制台。

Native.loadLibrary无法使用完整路径,请尝试System.load 如果您不能使用它,您也可以通过设置java的环境变量来指定加载之前的目录

System.setProperty("jna.library.path", "C:\\Users\\ElteGps 022\\Documents\\NetBeansProjects\\JavaApplication1\\src\\lib");

但强烈建议不要这样做,因为它只适用于您的计算机