I'm trying to use a compiled .jar Java library in my PyDev Jython project.
I successfully added the .jar to the PYTHONPATH and was able to begin coding with auto complete working.
The library requires a .dll extension as well, javaHeclib.dll
, so I added that to the External Libs section of my project.
I can import the library fine, but I get an error when I try to access any of its functions:
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path
I added a VM argument to my Run Configuration, with no luck:
-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"
I can run the library from the command line just fine using the java.library.path
above.
Experimenting in the PyDev Console, I noticed I can load the .dll extension with an absolute path, but not a relative one:
>>> 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
Unfortunately, the library is using the the System.loadLibrary
call above, and I don't have access to its source.
Why is javaHeclib.dll
not in my java.library.path
?
EDIT
Setting the java.library.path
to the directory containing the dll didn't allow me to load it using System.loadLibrary
.
-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"
(Using forward slashes didn't make a difference.) I also tried changing the default VM args in eclipse.ini
, with no luck:
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
I had similar issue but with Ghost Script dll. Even when followed placing the files in working directory and followed the instructions, it didn't work for me, refer the tag Ghost4J. java.lang.UnsatisfiedLinkError: Unable to load library 'gsdll64' and used the -Djna.library.path to get it worked.
I think the better way is:
That's it. You do not need to manually change anything in configuration.
I got this working.
For future reference:
Say the dll you need is in
Y:\path\to\dlls\lib\
. Then set your Run Configuration's working directory toY:\path\to\dlls\
and set your VM arguments to include-Djava.library.path=lib
.That's it, it should now work. I don't know why specifying an absolute path in
java.library.path
didn't work previously, but setting a working directory seems to have done it.Perhaps it's something peculiar to the specific library I'm using (or that Eclipse is running from a different drive than the library is on)...