Java JNI y bibliotecas dependientes en Windows
Larga historia corta: tengo un tarro ejecutable, que llamajni.dll
que depende delib.dll
. Y me estoy poniendo tan temidoUnsatisfiedLinkError
.
Esta La respuesta llega bastante cerca, pero no logra resolver el problema, según mi experiencia. Incluso cuando la carpeta donde residen los DLL está especificada enjava.library.path
, no funcionará. Tengo que cambiar las ventanasPATH
variable de entorno también. De hecho, el defectojava.library.path
en Windows parece serPATH
.
¿Hay alguna manera "bonita" de arreglar esto? Quiero crear un instalador para Windows y me pregunto cómo resolvería este problema, de modo que el usuario final no tenga que hacer ningún trabajo manual.
EDITAR:
Lo que implementé es lo siguiente: la aplicación se envía con una carpeta llamada "native_libs" que tiene bibliotecas dinámicas para todas las arquitecturas compatibles. La estructura es la siguiente:
/
+- native_libs/
+- windows/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- linux/
| +- x86/
| | +- ...
| +- x64/
| +- ...
|
+- libs/
+- ...
En tiempo de ejecución, mientras la aplicación se inicializa, se detectan la arquitectura JRE correcta y el sistema operativo del sistema y se copian los archivos de biblioteca adecuados en la carpeta libs /. losjava.library.path
se está configurando en tiempo de ejecución, así como un hack común. Finalmente, elPATH
La variable de entorno para Windows se establece utilizando un lanzador nativo.
¿Algún margen de mejora? Tal vez copiando los archivos DLL en el mismo directorio que eljar
archivo negaría la necesidad de configurar eljava.library.path
yPATH
variables? Necesito investigar cargando los dll's conSystem.load()
También, lo que anulará la necesidad de copiar archivos.