打包JNI库

Dav*_*ave 6 java windows java-native-interface

我正在使用Java开发应用程序,我有一个我需要能够使用的库.该库有一个jar文件和一个dll文件.目前我已将dll文件放入我的系统文件夹并将jar链接到IDE.我的问题是,我想将所有内容打包到用户可以运行的单个可执行jar中(可能使用webstart).

如何在没有用户将dll复制到系统文件夹中的情况下生成此jar文件?有没有办法把所有东西放在一个档案中?

Joo*_*kka 4

您可以将 打包.dll到 中.jar,但由于 Windows 处理 s 的方式,必须先将物理.dll文件从那里解包,然后才能加载 .dll。无法.dll直接从.jar.

这个问题似乎包含一个适当的实现。但请注意,这有点容易出错:如果程序没有对要提取的任何位置的写入权限.dll,那么您的情况就会很奇怪;您无法加载,.dll因为您没有权限先写入它。

更可靠的解决方案是使用某种安装程序将整个应用程序安装到目录层次结构中,例如

/whatEver/myApp/                 (The working directory of the app.)
/whatEver/myApp/myApp.jar        (The main app.)
/whatEver/myApp/lib/library.dll  (The JNI library.)
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地使用相对于工作目录的路径加载dll,

System.loadLibrary("lib/library.dll");
Run Code Online (Sandbox Code Playgroud)

为了变得更加健壮,您需要确保在尝试加载库之前正在运行具有适当数量的位的 JVM。一个鲜为人知的事实是,64 位虚拟机无法加载 32 位库,反之亦然。看到这个问题。