2008-08-18 7 views
5

Estoy a punto de realizar mi primer viaje al mundo de JNI (Java Native Interface) para proporcionar notificaciones de cambio del sistema de archivos desde el código C/C++ específico de la plataforma a Java. Eso es a menos que alguien sugiera una biblioteca brillante para hacer esto que me he perdido.JNI y Java: ¿cómo hacer o hacer llamadas llamando a hormiga?

Soy nuevo en JNI He logrado encontrar mucha documentación en el lado de la interfaz y en el lado de la generación de la biblioteca, pero no he encontrado mucho para construir la biblioteca nativa.

Tengo una compilación existente basada en ant para la fuente de Java preexistente, por lo que estoy tratando de averiguar si debo llamarme para crear la biblioteca o si es mejor hacer make para llamar a la hormiga después de crear la biblioteca?

Ninguna de las dos opciones es tremendamente buena, pero ambas parecen mejores que tratar de hacer que un compilador compile el código y genere la biblioteca directamente.

Respuesta

3

No me gusta mucho make debido a su conjunto de reglas implícito y al tratamiento de espacios en blanco. Personalmente, utilizaría tareas cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) para hacer mi compilación C. No son tan flexibles como la marca, pero también son mucho menos complejos y significa que no tienes que cargar a tus desarrolladores con la marca de aprendizaje.

+0

Las tareas de CPP funcionaron muy bien para lo que necesitaba gracias. Terminé necesitando hacer una compilación cruzada, pero la capacidad de especificar qué clase usar para el back-end para cpptasks solucionó eso. –

3

Como una alternativa más simple a JNI, pruebe JNA: https://jna.dev.java.net/, puede resolver esta molestia y ser más simple (suponiendo que puede hacer lo que quiera).

+0

JNA se veía como una buena forma de hacer lo que quería, pero lamentablemente tuve que empezar a crear nuevas clases de ventanas y devolver llamadas a funciones, lo que no parecía posible, así que tuve que recurrir al uso de JNI. –

1

Estoy trabajando en algo similar en este momento. Tenga en cuenta que usar swig de swig.org suele ser más fácil ya que genera los resguardos de la biblioteca nativa para usted.

La respuesta breve a su pregunta es que el archivo ant debe ejecutar el archivo make después de que la biblioteca java ya se haya compilado, ya que la biblioteca nativa depende del encabezado generado swig, que se genera a partir de los archivos de la clase java.

Si está muy familiarizado con hormiga y no quiere aprender un nuevo sistema, entonces http://ant-contrib.sourceforge.net/cpptasks/index.html, también vinculado por otro cartel, le permitirá construir C++ en hormiga.

1

Ignoré JNI por completo y utilizo un programa externo que escribe notificaciones en salida estándar. Java puede simplemente leer de la secuencia de salida de los programas y generar cualquier evento que sea necesario. JNI es demasiado trabajo si lo único que desea es enviar notificaciones simples.

Además, en Linux puede simplemente iniciar "inotifywait" (con algunos parámetros adecuados, consulte "man inotifywait").

0

También puede probar las tareas terp C++ en Codemesh. No son gratuitos, pero ofrecen un alto nivel de abstracción junto con la capacidad de descubrir/especificar el compilador de C++ y la capacidad de iterar en más de una configuración de compilador/arquitectura de procesador/compilador para compilaciones multiplataforma.

Cuestiones relacionadas