我正在尝试在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}"
答案 0 :(得分:45)
我认为更好的方法是:
就是这样。您无需手动更改配置中的任何内容。
答案 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使其工作。