eclipse - esta - no dpuareu_jni in java library path
Agregue.dll a java.library.path en el proyecto Eclipse/PyDev Jython (3)
Estoy tratando de usar una biblioteca compilada .jar de Java en mi proyecto PyDev Jython.
Agregué exitosamente el archivo .jar a PYTHONPATH y pude comenzar a codificar con el trabajo de auto completado.
La biblioteca también requiere una extensión .dll, javaHeclib.dll
, por lo que la agregué a la sección de bibliotecas externas de mi proyecto.
Puedo importar la biblioteca bien, pero recibo un error cuando intento acceder a cualquiera de sus funciones:
java.lang.UnsatisfiedLinkError: java.lang.UnsatisfiedLinkError: no javaHeclib in java.library.path
Agregué un argumento de VM a mi configuración de ejecución, sin suerte:
-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"
Puedo ejecutar la biblioteca desde la línea de comandos con la java.library.path
anterior.
Al experimentar en la consola de PyDev, noté que puedo cargar la extensión .dll con una ruta absoluta, pero no relativa:
>>> 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
Desafortunadamente, la biblioteca está utilizando la llamada a System.loadLibrary
anterior, y no tengo acceso a su fuente.
¿Por qué javaHeclib.dll
no está en mi java.library.path
?
EDITAR
La configuración de java.library.path
al directorio que contiene la dll no me permitió cargarla usando System.loadLibrary
.
-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"
(El uso de barras diagonales no hizo una diferencia). También intenté cambiar los argumentos de VM predeterminados en eclipse.ini
, sin suerte:
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"
Creo que la mejor manera es:
- Cree una carpeta bajo el proyecto, por ejemplo dll.
- Copia / pega todos los archivos dll en esta carpeta.
- En proyecto -> Propiedades -> Java Build Path -> Fuente, haga clic y expanda los detalles de la fuente.
- Verá la ubicación de la biblioteca nativa, haga clic / resáltela.
- Luego haga clic en editar a la derecha, haga clic en el espacio de trabajo nuevamente. Puedes ver la carpeta dll debajo del proyecto.
- Selecciónelo y haga clic en OK, OK. Verás que la dll se agrega en la ubicación de la biblioteca nativa.
Eso es. No es necesario cambiar manualmente nada en la configuración.
Tengo este trabajo
Para futura referencia:
Diga que la dll que necesita está en Y:/path/to/dlls/lib/
. Luego, configure el directorio de trabajo de la Configuración de Ejecución en Y:/path/to/dlls/
y configure los argumentos de la VM para que incluyan -Djava.library.path=lib
.
Eso es todo, ahora debería funcionar. No sé por qué la especificación de una ruta absoluta en java.library.path
no funcionó anteriormente, pero la configuración de un directorio de trabajo parece haberlo hecho.
Tal vez sea algo propio de la biblioteca específica que estoy usando (o que Eclipse se esté ejecutando desde una unidad diferente a la que está en la biblioteca) ...
Tuve un problema similar, pero con Ghost Script dll. Incluso cuando seguí colocando los archivos en el directorio de trabajo y siguiendo las instrucciones, no funcionó para mí, consulte la etiqueta Ghost4J. java.lang.UnsatisfiedLinkError: no se puede cargar la biblioteca ''gsdll64'' y se usó el archivo -Djna.library.path para que funcionara.