Domanda

Sto per fare il mio primo viaggio nel mondo di JNI (Java Native Interface) per fornire notifiche di modifica del file system dal codice C/C++ specifico della piattaforma a Java.Questo a meno che qualcuno non suggerisca qualche libreria brillante per fare questo che mi sono perso.

Essendo nuovo in JNI, sono riuscito a trovare molta documentazione sul lato dell'interfaccia e sulla generazione della libreria, ma non ho trovato molto sulla creazione della libreria nativa.

Ho una build esistente basata su ant per il sorgente Java preesistente, quindi sto cercando di capire se dovrei convincere ant a chiamare make per creare la libreria o se è meglio chiamare make a ant dopo aver creato la Biblioteca?

Nessuna delle due opzioni sembra terribilmente carina, ma entrambe sembrano migliori che provare a convincere Ant a chiamare un compilatore per compilare il codice e generare direttamente la libreria.

È stato utile?

Soluzione

Detesto fortemente make a causa delle sue regole implicite e del trattamento degli spazi bianchi.Personalmente utilizzerei le attività cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) per eseguire la compilazione in C.Non sono flessibili come make ma sono anche molto meno complessi e ciò significa che non dovrai sovraccaricare i tuoi sviluppatori con l'apprendimento di make.

Altri suggerimenti

Come alternativa più semplice a JNI, prova JNA: https://jna.dev.java.net/, potrebbe risolvere questo problema ed essere più semplice (supponendo che possa fare quello che vuoi).

Salterei completamente JNI e utilizzerei un programma esterno che scrive notifiche sull'output standard.Java può quindi semplicemente leggere dal flusso di output del programma e generare qualsiasi evento necessario.JNI richiede troppo lavoro se tutto ciò che desideri è inviare semplici notifiche.

Inoltre, su Linux puoi semplicemente avviare "inotifywait" (con alcuni parametri adatti, vedi "man inotifywait").

Sto lavorando a qualcosa di simile proprio adesso.Tieni presente che usare swig da swig.org è spesso più semplice poiché genera per te gli stub nella libreria nativa.

La risposta breve alla tua domanda è che il file ant dovrebbe eseguire il file make dopo che la libreria Java è già stata creata, poiché la libreria nativa dipende dall'intestazione generata swig, che viene generata dai file di classe Java.

Se hai molta familiarità con Ant e non vuoi imparare un nuovo sistema, allora http://ant-contrib.sourceforge.net/cpptasks/index.html, anch'esso collegato da un altro poster, ti consentirà di creare c++ in ant.

Potresti anche provare le attività terp C++ su Codemesh.Non sono gratuiti ma offrono un elevato livello di astrazione abbinato alla capacità di scoprire/specificare il compilatore C++ e alla capacità di eseguire iterazioni su più di un'architettura/configurazione del compilatore/processore per build multipiattaforma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top