Pregunta

Ejemplo:Tengo dos objetos compartidos (lo mismo debe aplicarse .dll).El primer objeto compartido es de una tercera parte de la biblioteca, vamos a llamar a libA.así.Me has envuelto en algo de esto con JNI y creado mi propia biblioteca, libB.así.Ahora libB depende de libA.

Cuando webstarting, tanto las bibliotecas son lugares en algunos webstart área de trabajo.Mi código de java intenta cargar libB.En este punto, el cargador del sistema intentará cargar libA que no está en el sistema de ruta de biblioteca (java.biblioteca.ruta de acceso no ayudar a este).El resultado final es que la libB tiene un insatisfecho enlace y no se puede utilizar.

He intentado cargar libA antes de la libB, pero que aún no funciona.Parece que el OS quiere hacer que la carga para mí.Hay alguna manera de que pueda hacer este trabajo distinto estáticamente compilar?

¿Fue útil?

Solución 2

Estática compilación resultó ser la única manera de webstart dependientes múltiples bibliotecas nativas.

Otros consejos

No estoy seguro de si esto iba a ser manejado exactamente de la misma manera webstart, pero nosotros nos encontramos en esta situación en una aplicación de escritorio cuando se trata de un conjunto de bibliotecas nativas (dll en nuestro caso).

La carga de libA antes de la libB debería funcionar, a menos que una de esas bibliotecas tiene una dependencia que está en paradero desconocido y no en la ruta.Mi entendimiento es que una vez que se llega a un sistema de loadLibrary de la llamada (es decir,Java ha encontrado en la biblioteca de su java.biblioteca.camino y ahora es decirle al sistema operativo para cargar) - es completamente dependiente en el sistema operativo para encontrar a todos los dependientes de las bibliotecas, porque en ese momento es el sistema operativo que se carga la biblioteca para el proceso, y el sistema operativo sólo sabe mirar en la ruta de acceso del sistema.Que parece difícil de establecer en el caso de un Webstart app, pero hay una forma de evitar esto que no implique la estática de la compilación.Usted puede ser capaz de shuffle donde las bibliotecas son - no estoy seguro de que

Si utiliza un cargador de clases personalizadas, usted puede reemplazar loadLibrary y findLibrary para que pueda localizar las bibliotecas desde dentro de un frasco en su classpath, y si también se hacen conscientes de su nativo dependencias de la biblioteca (es decir,libB depende de libA depende de libX, luego cuando la carga de la libB se puede coger y asegurarse de que la carga libA en primer lugar, y en la comprobación de que el aviso de carga y libX primera.A continuación, el sistema operativo no intenta encontrar una biblioteca que no está en su camino.Es klunky y un poco doloroso, pero asegurándose de Java se encuentra y carga de todos ellos en el orden correcto puede trabajar.

Son nativos de las bibliotecas se empaqueta en un firmado frasco que aparece como

<nativelib ...> 

En el archivo JNLP?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top