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

Rob*_*ati 20 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
Run Code Online (Sandbox Code Playgroud)

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

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"
Run Code Online (Sandbox Code Playgroud)

我可以使用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
Run Code Online (Sandbox Code Playgroud)

不幸的是,该库正在使用System.loadLibrary上面的调用,我无法访问其源代码.

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

编辑

设置java.library.path到包含dll的目录不允许我使用它加载它System.loadLibrary.

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"
Run Code Online (Sandbox Code Playgroud)

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

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
Run Code Online (Sandbox Code Playgroud)

小智 45

我认为更好的方法是:

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

而已.您无需手动更改配置中的任何内容.


Rob*_*ati 9

我得到了这个工作.

备查:

说你需要的DLL是Y:\path\to\dlls\lib\.然后将Run Configuration的工作目录Y:\path\to\dlls\设置为并将VM参数设置为include -Djava.library.path=lib.

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

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