依赖JNI的库

 2023-01-21    286  

问题描述

我正在通过JNI运行库(我没有编写),并且在内部调用了另一个DLL.我会遇到一个错误,说”找不到依赖库”,除非我将其他DLL的路径放在系统路径变量上(我在Windows XP上).我希望能够在Java命令行上处理此操作,并且我已经尝试将其添加到-djava.library.path和classPath中,这都不是有效的(我期望-djava.library.path可以工作但没有班级路径,但两者都没有起作用).有办法做到吗?

谢谢,

依赖JNI的库

jeff

推荐答案

  • 如果您有一个dll名称’mynativedll.dll’,则应该在loadLibrary调用中使用’mynativedll’.
  • 使用 depentency walker 检查是否有mynativedll.dll.dll.dll
  • 是否需要任何文件

  • 如果有的话,将它们包含在与mynativedll.dll的同一文件夹中 – 一个您可以使用的一个,请尝试将其他必需的文件放在System32文件夹中.

其他推荐答案

我能够通过使用System.load()在所有DLL上以反向依赖关系顺序使用System.load()在路径上使用任何DLL.只是要清楚,我在所有依赖的DLL上呼叫System.load(),而不仅仅是JNI DLL.您不必在Windows随附的DLL上调用System.load()(它们在路径上).

我在一个网络应用程序中这样做,其中一个罐子中包括打开包装的dll.您的情况似乎更简单,所以我相信它应该起作用.我通常在这里遵循解决方案:如何制作罐子包括DLL文件的文件?

其他推荐答案

这对我有很大帮助.
还管理使用Cygwin构建的JNI DLL:

首先:

/* conditioned if OS is windows because also need it to work in Linux env. */ 
System.loadLibrary("cygwin1");

然后:

System.loadLibrary("mylib");

在Windows上,这需要设置Java.Library.Path以匹配两个库位置.

如果从Eclipse运行,则可以在Java构建路径(在JRE库设置中)中替换此设置的”本地库位置”.

但是,仍然发现这有些棘手.

以上所述是小编给大家介绍的依赖JNI的库,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26280.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。