Question

Je suis sur le point de faire mon premier voyage dans le monde de JNI (Java Native Interface) pour fournir des notifications de modification du système de fichiers depuis le code C/C++ spécifique à la plate-forme vers Java.À moins que quelqu'un ne suggère une bibliothèque brillante pour ce faire, ce que j'ai manqué.

Étant nouveau sur JNI, j'ai réussi à trouver beaucoup de documentation sur le côté interface et sur la génération de bibliothèque, mais je n'ai pas trouvé grand-chose sur la construction de la bibliothèque native.

J'ai une version existante basée sur ant pour la source Java préexistante, j'essaie donc de déterminer si je dois demander à ant d'appeler make pour créer la bibliothèque ou s'il est préférable de demander à make d'appeler ant après la création. la bibliothèque?

Aucune des deux options ne semble terriblement intéressante, mais les deux semblent meilleures que d'essayer de demander à Ant d'appeler un compilateur pour compiler le code et générer directement la bibliothèque.

Était-ce utile?

La solution

Je n'aime pas du tout make en raison de son ensemble de règles implicites et de son traitement des espaces.Personnellement, j'utiliserais les tâches cpp (http://ant-contrib.sourceforge.net/cpptasks/index.html) pour faire ma compilation C.Ils ne sont pas aussi flexibles que make, mais ils sont également beaucoup moins complexes et cela signifie que vous n'aurez pas à surcharger vos développeurs avec l'apprentissage de make.

Autres conseils

Comme alternative plus simple à JNI, essayez JNA : https://jna.dev.java.net/, peut résoudre ce problème pour vous et être plus simple (en supposant qu'il puisse faire ce que vous voulez).

J'ignorerais complètement JNI et utiliserais un programme externe qui écrit des notifications sur la sortie standard.Java peut alors simplement lire le flux de sortie du programme et générer tout événement nécessaire.JNI demande beaucoup trop de travail si tout ce que vous voulez est d'envoyer de simples notifications.

De plus, sous Linux, vous pouvez simplement démarrer "inotifywait" (avec quelques paramètres appropriés, voir "man inotifywait").

Je travaille sur quelque chose de similaire en ce moment.Sachez qu'utiliser swig depuis swig.org est souvent plus facile car il génère pour vous les stubs de la bibliothèque native.

La réponse courte à votre question est que le fichier ant doit exécuter le fichier make une fois que la bibliothèque Java a déjà été construite, car la bibliothèque native dépend de l'en-tête généré par swig, qui est généré à partir des fichiers de classe Java.

Si vous êtes très familier avec Ant et que vous ne souhaitez pas apprendre un nouveau système, alors http://ant-contrib.sourceforge.net/cpptasks/index.html, également lié par une autre affiche, vous permettra de construire du C++ dans Ant.

Vous pouvez également essayer les tâches terp C++ sur Codemesh.Ils ne sont pas gratuits mais ils offrent un haut niveau d'abstraction associé à la possibilité de découvrir/spécifier le compilateur C++ et à la possibilité d'itérer sur plusieurs compilateurs/architectures de processeur/configurations de compilateur pour les versions multiplateformes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top