从jar加载库

Sia*_*sei 9 java java-native-interface

我如何从jar加载库?例如

Test.jar
 +- libAbc.so
 +- libDef.so
 +- ...
Run Code Online (Sandbox Code Playgroud)

Kev*_*Day 8

可能不是你正在寻找的答案(将文件提取到临时位置你正在寻找的答案),但我想我会分享一些真实世界的经验:

从jar中提取库所需的管道,确保它随后被清理,不会与可能使用jar的其他应用程序冲突等......非常棘手.它可以做到,但是很有可能你最终会遇到大量临时用户系统的临时副本,或者你最终会遇到使用这些库的多个应用程序之间的冲突.

当您添加许多操作系统不允许将任何文件用作库的事实时(通常,将运行您的应用程序的用户的权限不允许它们在temp文件夹中标记任意文件对于执行而言,将本机库打包在jar中的想法变得不那么有吸引力了.

我们终于结束了所做的是转向,我们有我们的安装程序(其中一个模型具有足够的权限运行)一起放入罐子适当的本地库.这很简单,将所有执行库保存在同一个地方,并且易于管理和理解(尝试在一个应用程序中跟踪版本不兼容性b/c它正在尝试加载保存到临时存储的库通过第二次申请是一场彻头彻尾的噩梦.


Pet*_*ego 6

你必须将它解压缩到一些临时目录并使用`System.load("path/to/libAbc.so").

这已在前面讨论过.

编辑:更正了链接.


Tho*_*sen 5

本机代码正在由底层操作系统加载,如果该代码无法在 jar 文件中查看以获取您要加载的字节(Windows 不能),您必须自己在文件系统中访问它。

你能在你的 jar 文件旁边部署你的库吗?