Frage

Ich bin gerade dabei, meine erste Reise in die Welt von JNI (Java Native Interface) zu unternehmen, um Benachrichtigungen über Dateisystemänderungen von plattformspezifischem C/C++-Code nach Java bereitzustellen.Es sei denn, jemand schlägt dafür eine brillante Bibliothek vor, die ich verpasst habe.

Als JNI-Neuling habe ich viel Dokumentation zur Schnittstelle und zur Bibliotheksgenerierung gefunden, aber zum Erstellen der nativen Bibliothek habe ich nicht viel gefunden.

Ich habe einen vorhandenen Build, der auf Ant für die bereits vorhandene Java-Quelle basiert, also versuche ich herauszufinden, ob ich ant dazu bringen soll, make aufzurufen, um die Bibliothek zu erstellen, oder ob es am besten ist, make dazu zu bringen, ant nach der Erstellung aufzurufen die Bibliothek?

Keine der beiden Optionen ist besonders nett, aber beide scheinen besser zu sein, als zu versuchen, ant dazu zu bringen, einen Compiler aufzurufen, um den Code zu kompilieren und die Bibliothek direkt zu generieren.

War es hilfreich?

Lösung

Ich mag make aufgrund seines impliziten Regelsatzes und der Behandlung von Leerzeichen überhaupt nicht.Persönlich würde ich CPP-Aufgaben verwenden (http://ant-contrib.sourceforge.net/cpptasks/index.html), um meine C-Kompilierung zu erstellen.Sie sind nicht so flexibel wie make, aber auch weitaus weniger komplex und Sie müssen Ihre Entwickler nicht mit dem Erlernen von make belasten.

Andere Tipps

Versuchen Sie als einfachere Alternative zu JNI JNA: https://jna.dev.java.net/, kann dieses Problem für Sie lösen und einfacher sein (vorausgesetzt, es kann das tun, was Sie wollen).

Ich würde JNI komplett überspringen und ein externes Programm verwenden, das Benachrichtigungen in die Standardausgabe schreibt.Java kann dann einfach aus dem Ausgabestream des Programms lesen und jedes erforderliche Ereignis generieren.JNI ist viel zu aufwändig, wenn Sie lediglich einfache Benachrichtigungen senden möchten.

Unter Linux können Sie auch einfach „inotifywait“ starten (mit einigen passenden Parametern, siehe „man inotifywait“).

Ich arbeite gerade an etwas Ähnlichem.Beachten Sie, dass die Verwendung von swig von swig.org oft einfacher ist, da es die Stubs für die native Bibliothek für Sie generiert.

Die kurze Antwort auf Ihre Frage lautet, dass die Ant-Datei die Make-Datei ausführen sollte, nachdem die Java-Bibliothek bereits erstellt wurde, da die native Bibliothek vom swig-generierten Header abhängt, der aus den Java-Klassendateien generiert wird.

Wenn Sie mit Ant sehr vertraut sind und kein neues System erlernen möchten, dann http://ant-contrib.sourceforge.net/cpptasks/index.html, auch von einem anderen Poster verlinkt, ermöglicht es Ihnen, C++ in Ant zu erstellen.

Sie können auch die Terp-C++-Aufgaben unter ausprobieren Codemesh.Sie sind nicht kostenlos, bieten aber ein hohes Maß an Abstraktion gepaart mit der Möglichkeit, den C++-Compiler zu erkennen/anzugeben und über mehr als eine Compiler-/Prozessorarchitektur/Compilerkonfiguration für Multiplattform-Builds zu iterieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top