JNI и Java: муравей вызывает или вызывает муравей? - PullRequest
5 голосов
/ 19 августа 2008

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 19 августа 2008

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

3 голосов
/ 19 августа 2008

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

1 голос
/ 18 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

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

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

0 голосов
/ 13 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...