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