22

我正在尝试在我的 PyDev Jython 项目中使用已编译的 .jar Java 库。

我成功地将 .jar 添加到 PYTHONPATH 并且能够开始使用自动完成工作进行编码。

该库还需要 .dll 扩展名javaHeclib.dll,因此我将其添加到项目的 External Libs 部分。

我可以很好地导入库,但是当我尝试访问它的任何功能时出现错误:

java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path

我在运行配置中添加了一个 VM 参数,但没有成功:

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"

我可以使用上面的方法从命令行运行库java.library.path

在 PyDev 控制台中进行实验,我注意到我可以使用绝对路径加载 .dll 扩展名,但不能使用相对路径:

>>> import java.lang
>>> java.lang.System.load('Y:/path/to/javaHeclib.dll')
>>> java.lang.System.loadLibrary('javaHeclib')
Traceback (most recent call last):
  File "<console>", line 1, in ?
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path

不幸的是,图书馆正在使用System.loadLibrary上面的调用,我无权访问它的源代码。

为什么javaHeclib.dll不在我的java.library.path

编辑

将 设置为java.library.path包含 dll 的目录不允许我使用System.loadLibrary.

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"

(使用正斜杠没有任何区别。)我还尝试更改默认 VM 参数 in eclipse.ini,但没有运气:

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
4

3 回答 3

51

我认为更好的方法是:

  1. 在项目下创建一个文件夹,例如dll。
  2. 将所有 dll 文件复制/粘贴到此文件夹中。
  3. 在项目 -> 属性 -> Java 构建路径 -> 源中,单击并展开源详细信息。
  4. 您将看到本机库位置,单击/突出显示它。
  5. 然后点击右边的编辑,再次点击工作区。可以看到项目下的dll文件夹。
  6. 选择它并单击确定,确定。您将看到 dll 已添加到本机库位置。

就是这样。您无需手动更改配置中的任何内容。

Java 构建路径配置

于 2013-02-01T18:35:27.740 回答
11

我得到了这个工作。

备查:

假设您需要的 dll 在Y:\path\to\dlls\lib\. 然后将您的运行配置的工作目录设置为Y:\path\to\dlls\并将您的 VM 参数设置为 include -Djava.library.path=lib

就是这样,它现在应该可以工作了。我不知道为什么在java.library.path以前指定绝对路径不起作用,但设置工作目录似乎已经完成了。

也许这是我正在使用的特定库所特有的东西(或者 Eclipse 是从与库所在的驱动器不同的驱动器运行的)......

于 2012-06-20T22:13:11.457 回答
0

我有类似的问题,但使用 Ghost Script dll。即使按照将文件放在工作目录中并按照说明进行操作,它对我也不起作用,请参阅标签 Ghost4J。java.lang.UnsatisfiedLinkError: 无法加载库 'gsdll64'并使用 -Djna.library.path 使其工作。

于 2017-06-12T19:10:54.247 回答