在Eclipse / PyDev Jython项目中将.dll添加到java.library.path

时间:2012-06-20 15:47:58

标签: eclipse jython pydev java.library.path

我正在尝试在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}"

(使用正斜杠没有什么区别。)我也尝试更改eclipse.ini中的默认VM args,没有运气:

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

3 个答案:

答案 0 :(得分:45)

我认为更好的方法是:

  1. 在项目下创建一个文件夹,例如dll。
  2. 将所有dll文件复制/粘贴到此文件夹中。
  3. 在项目中 - &gt;属性 - &gt; Java构建路径 - &gt;源,单击并展开源详细信息。
  4. 您将看到本机库位置,单击/突出显示它。
  5. 然后单击右侧的编辑,再次单击工作区。您可以在项目下看到dll文件夹。
  6. 选择它,然后单击“确定”,“确定”。您将看到在本机库位置添加了dll。
  7. 就是这样。您无需手动更改配置中的任何内容。

答案 1 :(得分:9)

我得到了这个工作。

供将来参考:

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

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

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

答案 2 :(得分:0)

我有类似的问题但是使用Ghost Script dll。即使按照将文件放在工作目录中并按照说明操作,它也不适合我,请参考标签 Ghost4J. java.lang.UnsatisfiedLinkError: Unable to load library 'gsdll64'并使用-Djna.library.path使其工作。