我正在尝试使用:
在Windows 7 64位计算机上运行32位JVM的32位DLL(使用Visual Studio 2015构建)
在Windows 7 64位计算机上运行64位JVM的64位DLL(使用Visual Studio 2015构建)
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...
答案 0 :(得分:0)
java.library.path
源自VM启动时的PATH
。 java.library.path
对系统行为没有影响。它仅用于指导JVM最初尝试加载本机库的位置。
系统本身使用PATH
来通知其搜索不仅是初始加载,还是所有依赖项。 JNA过度加载本机库的唯一控件是是否在依赖项的搜索路径中包含目标DLL的目录。