Java System.loadLibrary依赖项

时间:2010-12-13 18:29:09

标签: java dll native

我使用的第三方jar正在尝试使用System.loadLibrary加载本机库。我认为正在发生的是其中一个正在加载的库依赖于另一个本机库。在这种情况下,指向-Djava.library.path无法正常工作。来自应用程序站点的说明将dll放在jre / bin目录中,但我认为这是一个非常糟糕的主意(特别是在尝试部署到客户端站点时)。

所以,这个问题实际上是两部分。

  1. 如果本机lib尝试加载另一个-Djava.library.path不起作用的本机库,是否有意义?

  2. 解决这个问题有一个很好的解决方案吗?我想我可以在所有dll上显式调用System.loadLibrary(我甚至不确定这是否可行),但我需要确保以正确的顺序调用它们,否则我会遇到同样的问题。

  3. 编辑:我认为这是有意义的,它已经发生了,我到目前为止所读到的最好的解决方案是使用依赖性walker来计算它然后以相反的顺序加载它们...但我愿意更好的建议......

    感谢, 杰夫

1 个答案:

答案 0 :(得分:4)

是的,本地库不使用Java属性-Djava.library.path链接到其他本机库是有道理的。

一些可能的方法:

  • 修复了第三方jar以加载自己的依赖项,依赖于java.library.path。
  • 您的代码以反向地形排序加载第三方jar所需的DLL。但是,这会使您的代码指定第三方jar的依赖项。这些依赖关系可能会改变。
  • 您使用特定于操作系统的DLL搜索路径(例如,在Unix / Linux / Mac上使用LD_LIBRARY_PATH,或在Windows上使用PATH)。但是,这可能需要启动脚本。