从 JNI 相关的库

2022-09-02 20:47:06

我通过JNI运行一个库(我没有写它),它在内部调用另一个DLL。我收到一个错误,说“找不到依赖库”,除非我将其他DLL的路径放在系统PATH变量上(我在Windows XP上)。我希望能够在java命令行上处理这个问题,我已经尝试过将其添加到-Djava.library.path和classpath中,这两者都不起作用(我期望-Djava.library.path工作,但不是classpath,但都不起作用)。有没有办法做到这一点?

谢谢

杰夫


答案 1
  • 如果您有一个 DLL 名称“MyNativeDLL.dll”,则应在 LoadLibrary 调用中使用“MyNativeDLL”。
  • 使用 Dependency Walker 检查 MyNativeDLL 是否需要任何文件.dll
  • 如果有,请将它们包含在与MyNativeDLL相同的文件夹中.dll - 您可以尝试将其他必需的文件放在System32文件夹中。

答案 2

我能够通过在所有 DLL 上以反向依赖顺序使用 System.load() 将任何 DLL 放在 PATH 上,从而使其正常工作。为了清楚起见,我在所有相关的 DLL 上调用 System.load(),而不仅仅是 JNI DLL。您不必在 Windows 附带的 DLL 上调用 System.load()(它们位于 PATH 上)。

我在一个Web应用程序中执行此操作,其中一个jar包含正在解压缩的DLL。你的情况似乎更简单,所以我相信它应该有效。我通常遵循这里的解决方案:如何制作包含DLL文件的JAR文件?


推荐