Pregunta

Estoy a punto de hacer mi primer viaje al mundo de JNI (Java Native Interface) para proporcionar notificaciones de cambios en el sistema de archivos desde código C/C++ específico de la plataforma a Java.Eso es a menos que alguien sugiera alguna biblioteca brillante para hacer esto que me he perdido.

Siendo nuevo en JNI, logré encontrar mucha documentación en el lado de la interfaz y en el lado de generación de la biblioteca, pero no encontré mucha sobre la construcción de la biblioteca nativa.

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

Ninguna de las opciones destaca como terriblemente agradable, pero ambas parecen mejores que intentar que Ant llame a un compilador para compilar el código y generar la biblioteca directamente.

¿Fue útil?

Solución

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

Otros consejos

Como alternativa más sencilla a JNI, pruebe JNA: https://jna.dev.java.net/, puede resolver este problema por usted y ser más simple (suponiendo que pueda hacer lo que usted desea).

Saltaría JNI por completo y usaría un programa externo que escribe notificaciones en la salida estándar.Luego, Java puede simplemente leer el flujo de salida del programa y generar cualquier evento que sea necesario.JNI es demasiado trabajo si lo único que quieres es enviar notificaciones simples.

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

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

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

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

También puedes probar las tareas terp C++ en malla de código.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 sobre más de un compilador/arquitectura de procesador/configuración del compilador para compilaciones multiplataforma.

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