Вопрос

Я как раз собираюсь совершить свое первое путешествие в мир JNI (Java Native Interface), чтобы предоставлять уведомления об изменениях файловой системы из кода C / C ++ для конкретной платформы в Java.Это если только кто-нибудь не предложит какую-нибудь блестящую библиотеку для этого, которую я пропустил.

Будучи новичком в JNI, мне удалось найти много документации по интерфейсу и созданию библиотеки, но я мало что нашел по созданию собственной библиотеки.

У меня есть существующая сборка на основе ant для ранее существовавшего исходного кода Java, поэтому я пытаюсь решить, должен ли я заставить ant вызывать make для создания библиотеки или лучше заставить make вызывать ant после создания библиотеки?

Ни один из вариантов не кажется ужасно приятным, но оба кажутся лучше, чем пытаться заставить ant вызвать компилятор для компиляции кода и непосредственного создания библиотеки.

Это было полезно?

Решение

Мне сильно не нравится make из-за его неявного набора правил и обращения с пробелами.Лично я бы использовал cpp-задачи (http://ant-contrib.sourceforge.net/cpptasks/index.html), чтобы выполнить мою компиляцию C.Они не такие гибкие, как make, но они также гораздо менее сложны, и это будет означать, что вам не придется обременять своих разработчиков изучением make.

Другие советы

В качестве более простой альтернативы JNI попробуйте JNA: https://jna.dev.java.net/, может решить эту проблему для вас и быть проще (при условии, что он может делать то, что вы хотите).

Я бы полностью пропустил JNI и использовал внешнюю программу, которая записывает уведомления на стандартный вывод.Затем Java может просто считывать данные из выходного потока программы и генерировать любое необходимое событие.JNI - это слишком много работы, если все, что вы хотите, это отправлять простые уведомления.

Кроме того, в Linux вы можете просто запустить "inotifywait" (с некоторыми подходящими параметрами см. "man inotifywait").

Прямо сейчас я работаю над чем-то подобным.Имейте в виду, что использовать swig из swig.org часто проще, поскольку он генерирует заглушки для собственной библиотеки для вас.

Краткий ответ на ваш вопрос заключается в том, что файл ant должен запускать файл make после того, как библиотека java уже собрана, поскольку собственная библиотека зависит от сгенерированного swig заголовка, который генерируется из файлов классов java.

Если вы хорошо знакомы с ant и не хотите осваивать новую систему, то http://ant-contrib.sourceforge.net/cpptasks/index.html, также связанный другим постером, позволит вам создавать c ++ в ant.

Вы также можете попробовать задачи terp C ++ по адресу Кодемеш.Они не бесплатны, но предлагают высокий уровень абстракции в сочетании с возможностью обнаружения / указания компилятора C ++ и возможностью перебора более чем одной архитектуры компилятора / процессора / конфигурации компилятора для мультиплатформенных сборок.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top