长话短说:我有一个可执行的 jar,它调用jni.dll
依赖于lib.dll
. 我越来越害怕了UnsatisfiedLinkError
。
根据我的经验,这个答案非常接近,但无法解决问题。即使在 中指定了 dll 所在的文件夹java.library.path
,它也不起作用。我还必须更改 WindowsPATH
环境变量。事实上,java.library.path
Windows 上的默认设置似乎是PATH
.
有什么“漂亮”的方法来解决这个问题吗?我想为 Windows 构建一个安装程序,我想知道如何处理这个问题,这样最终用户就不必做任何手动工作。
编辑:
我实现的内容如下:该应用程序附带一个名为“native_libs”的文件夹,其中包含所有受支持架构的动态库。结构如下:
/
+- native_libs/
+- windows/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- linux/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- libs/
+- ...
在运行时,当应用程序初始化时,会检测到正确的 JRE 架构和系统操作系统,并将正确的库文件复制到 libs/ 文件夹中。java.library.path
也正在运行时设置以及使用常见的 hack 。最后,PATH
使用本机启动器设置 Windows 的环境变量。
有改进的余地吗?也许将dll复制到与文件相同的目录中jar
会消除设置java.library.path
和PATH
变量的需要?我还需要调查加载 dll System.load()
,这将消除复制文件的需要。