问题
Background
So I am attempting to load a jnilib (specifically JOGL) into Java on Mac OS X at runtime. I have been following along the relevant Stack Overflow questions:
- Maven and the JOGL Library
- Loading DLL in Java - Eclipse - JNI
- How to make a jar file that include all jar files
The end goal for me is to package platform specific JOGL files into a JAR and unzip them into a temp directory and load them at start-up. I worked my problem back to simply attempting to load JOGL using hard-coded paths:
File f = new File("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl.jnilib");
System.load(f.toString());
f = new File ("/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/libjogl_awt.jnilib");
System.load(f.toString());
I get the following exception when attempting to use the JOGL API:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
But when I specify java.library.path
by adding the following JVM option:
-Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/"
Everything works fine.
Question
Is it possible use System.load
(or some other variant) on Mac OS X as a replacement for -Djava.library.path that is invoked at runtime?
回答1:
Jogl always tries to auto-load all dependent libraries. To avoid this, there should be a NativeLibLoader class where you can call disableLoading() before you load the libraries yourself via the System.load()
回答2:
You don't have to provide the java.library.path
at startup. You can programmatically set it with
System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");
I don't know if System.load()
will work somehow without this library path.
回答3:
System.load(...)
takes libraryName as argument. It doesn't take path to library as argument.
JVM searches for a library with specified name in the list of paths specified in -Djava.library.path;
Here there is nothing specific to Mac OS X. It searches for libraries in the same way on all operating systems.
来源:https://stackoverflow.com/questions/2550571/loading-jni-lib-on-mac-os-x