java.lang.UnsatisfiedLinkError:无法加载库(使用Visual Studio 2015版本)

时间:2016-05-03 12:22:44

标签: java dll visual-studio-2015 native jna

我正在尝试使用:

  1. 在Windows 7 64位计算机上运行32位JVM的32位DLL(使用Visual Studio 2015构建)

  2. 在Windows 7 64位计算机上运行64位JVM的64位DLL(使用Visual Studio 2015构建)

  3. DLL提供了一些依赖项,但我已将'jna.library.path'设置为包含所有必需依赖项的文件夹,因此jna应该能够找到它们。我还将包含DLL及其依赖项的文件夹添加到'java.library.path'以确保找到它们。

    在这两种情况下,不幸的是,我得到了

      

    java.lang.UnsatisfiedLinkError:无法加载库。

    其他一些要考虑的要点:

    • 如果我从包含库的目录启动我的应用程序,它运行没有任何问题。 这是否表示DLL搜索路径存在加载问题?

    • 我之前使用Visual Studio 2010构建了库,我能够毫无问题地加载库。 这可能是DLL构建的问题吗?

    关于可能出现什么问题的任何想法?

    我启用了'jna.debug_load'和'jna.debug_load.jna'并且日志显示尝试了正确的路径但负载仍然失败(我检查并重新检查了两种情况下正确的lib是可在C:\ path \到\ my \ lib [32/64] \ xxx.dll)获得。以下日志用于32位DLL加载,但64位DLL的结果完全相同。

    ...snip...
    Trying (via loadLibrary) jnidispatch
    Looking in classpath from ...[...] for x86/jnidispatch.dll
    Found library resource at bundleresource://449.fwk22856250/com/sun/jna/win32-x86/jnidispatch.dll
    Trying C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll
    Found jnidispatch at C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll
    Looking for library 'xxx'
    Adding paths from jna.library.path: C:/path/to/my/lib32
    Trying C:\path\to\my\lib32\xxx.dll
    Adding system paths: []
    Trying C:\path\to\my\lib32\xxx.dll
    Looking for lib- prefix
    Trying libxxx.dll
    Looking in classpath from ...[...]
    ...
    java.lang.UnsatisfiedLinkError: Unable to load library 'xxx': Native library (win32-x86/xxx.dll) not found in resource path...
    ...snip...
    

1 个答案:

答案 0 :(得分:0)

java.library.path源自VM启动时的PATHjava.library.path对系统行为没有影响。它仅用于指导JVM最初尝试加载本机库的位置。

系统本身使用PATH来通知其搜索不仅是初始加载,还是所有依赖项。 JNA过度加载本机库的唯一控件是是否在依赖项的搜索路径中包含目标DLL的目录。