java - para - ¿Cargando JNI lib en Mac OS X?
java para mac high sierra (3)
No tiene que proporcionar java.library.path
al inicio. Puedes establecerlo programáticamente con
System.setProperty("java.library.path", "/var/folder/bla/foo/bar/");
No sé si System.load()
funcionará de alguna manera sin esta ruta de biblioteca.
Fondo
Así que estoy intentando cargar un jnilib (específicamente JOGL ) en Java en Mac OS X en tiempo de ejecución. He estado siguiendo las preguntas relevantes sobre desbordamiento de pila:
- Maven y la Biblioteca JOGL
- Cargando DLL en Java - Eclipse - JNI
- Cómo hacer un archivo jar que incluya todos los archivos jar
El objetivo final para mí es empaquetar archivos JOGL específicos de la plataforma en un JAR y descomprimirlos en un directorio temporal y cargarlos en el inicio. Volví a resolver mi problema simplemente intentando cargar JOGL usando rutas codificadas:
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());
Obtengo la siguiente excepción cuando intento usar la API de JOGL:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
Pero cuando especifico java.library.path
añadiendo la siguiente opción de JVM:
-Djava.library.path="/var/folders/+n/+nfb8NHsHiSpEh6AHMCyvE+++TI/-Tmp-/"
Todo funciona bien
Pregunta
¿Es posible usar System.load
(u otra variante) en Mac OS X como reemplazo de -Djava.library.path que se invoca en el tiempo de ejecución?
Jogl siempre intenta cargar automáticamente todas las bibliotecas dependientes. Para evitar esto, debe haber una clase NativeLibLoader donde puede llamar a disableLoading () antes de cargar las librerías a través de System.load ()
System.load(...)
toma libraryName como argumento. No toma el camino a la biblioteca como argumento. JVM busca una biblioteca con el nombre especificado en la lista de rutas especificadas en -Djava.library.path;
Aquí no hay nada específico para Mac OS X. Busca las bibliotecas de la misma manera en todos los sistemas operativos.