在 Java 中加载 DLL - Eclipse - JNI

2022-09-04 07:29:42

我正在尝试使用以下代码System.loadLibrary(“mydll”)在java中加载dll;

该项目被放置在D:\development\project\中,而我已将dll放在D:上。然后,我在 eclipse 配置中给出了以下 VM 参数 -Djava.library.path=D:/

但是当我运行时,我得到不满意的LinkerErError。在谷歌搜索了一下之后,我使用了System.load(“D:\mydll.dll”);

但再次遇到同样的问题,有人可以帮忙吗?


答案 1

在库路径中指定 DLL 文件名时,请省略该文件名。此外,您的 System.loadLibrary 调用应该只是 'mydll'。我可以告诉你(根据经验),如果你把DLL放在Eclipse中项目的根(即D:\Eclipse Workspace\Proj),它应该可以工作。任何进一步的链接器错误都可能来自查找其他 DLL 的依赖项问题。例外情况是相同的。使用类似 Dependency Walker (http://www.dependencywalker.com/) 的内容来查看 DLL 是否依赖于其他任何内容,而不是系统库路径。

编辑:不满意的LinkError:如果Java虚拟机找不到声明为本机的方法的适当本机语言定义,则抛出 - 看起来您正在使用不存在的JNI函数。


答案 2

你遇到的一个问题是:System.load(“D:\mydll.dll”);应该是 System.load(“D:\\mydll.dll”);或 System.load(“D:/mydll.dll”);

我在System.load上取得了更大的成功,但是loadlibrary更适合多平台。它为您计算出扩展名。


推荐