2010-04-23 7 views
6

Estoy empezando a aprender JNI. He seguido un ejemplo simple y he creado una aplicación Java que llama a un método Hello World en una biblioteca nativa. Me gustaría apuntar a Win32 y Linux x86.¿Cómo puedo incluir bibliotecas nativas específicas de plataforma en el archivo .JAR usando Eclipse?

Mi biblioteca reside en una DLL, y puedo llamarla muy bien utilizando LoadLibrary cuando la DLL se agrega a la raíz de mi proyecto de Eclipse.
Sin embargo, no puedo entender cómo hacer que Eclipse exporte un archivo JAR ejecutable que incluye el archivo DLL y .SO para Linux.

Así que mi pregunta es básicamente; ¿Cómo haría para crear un proyecto en Eclipse e incluir varias versiones de la misma biblioteca nativa?

Gracias,
Martin

+0

En cada diálogo de Eclipse, parece querer que apunte a un archivo JAR para la biblioteca nativa. Intenté comprimir mis libs en un contenedor y hacer referencia a eso, pero no cigarro. ¿Qué se supone que contiene un archivo jar? –

Respuesta

4

Para los JAR ejecutables, lo que debe hacer es extraer al directorio temporal (quizás en un bloque {} estático) y luego cargar el archivo DLL desde ese directorio (utilizando System.loadLibrary() en el mismo bloque). Para hacer esto, debe crear una subclase de ClassLoader y anular el método findLibrary() para permitir que las bibliotecas se encuentren en ese directorio. Puede hacer cualquier lógica que necesite aquí para cargar las bibliotecas de la plataforma en particular. Para ser honesto, el nombre de las bibliotecas en las diferentes plataformas debería ser similar de todos modos: creo que omites la parte 'lib' al cargar y la extensión. Esa es la esencia de eso. Probablemente sea más fácil de usar One-JAR que el otro cartel mencionado :)

+2

Gracias: lo hice funcionar al incluir la biblioteca como recurso y extraerla en tiempo de ejecución. Luego puede cargarse con System.load(). Escogió esta como la respuesta correcta porque es más detallada; sin embargo, echará un vistazo a One-Jar. –

3

Es posible que desee revisar el proyecto One-JAR. Le permite empaquetar su aplicación y sus dependencias (incluidas las bibliotecas nativas) en un solo archivo jar.

Cuestiones relacionadas