Что самый легкий путь состоит в том, чтобы использовать исходный код C в JAVA-приложении?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

9
задан Jonik 4 August 2009 в 17:31
поделиться

7 ответов

Ваш лучший выбор состоит в том, чтобы, вероятно, захватить хорошую книгу c (K&R: C Progranmming язык), чашка чая и начинают переводить! Я скептически относился бы к доверию программе перевода, чаще затем не, лучший переводчик самостоятельно! Если Вы делаете этого, то его сделанный и Вы не должны продолжать восстанавливать его. Могли бы быть некоторые сложности, если библиотека будет открытым исходным кодом, то необходимо будет проверить лицензию тщательно об этом. Другой вопрос для рассмотрения - то, что там всегда будет некоторым элементом риска и потенциальной ошибки в переводе, поэтому могло бы быть необходимо полагать, что запись некоторых тестов гарантирует, что перевод корректен.

Нет ли никакой JAVA equivelent Математических функций?

Поскольку Вы сами комментируете JNI, путь возможен, что касается компилятора C, Вы могли, вероятно, использовать 'Dev-c++ Bloodshead', мог бы работать, но это - большое усилие для ~5000 строк.

5
ответ дан 4 December 2019 в 11:09
поделиться

Вы уверены, что хотите пользоваться библиотекой C, даже если это является настолько маленьким?

Однажды 64 бита становится немного более распространенным, необходимо будет начать создавать/развертывать и версии на 64 бита и на 32 бита библиотеки также. И в зависимости от того, на что похож код C, Вы можете или, возможно, не должны обновлять код, чтобы заставить его создать как 64 бита.

Если библиотека C проста, может быть легче, просто портируют библиотеку C на чистый Java и не должны иметь дело с созданием/развертыванием библиотеки JNI, библиотеки C и кода Java.

1
ответ дан 4 December 2019 в 11:09
поделиться

Я скомпилировал бы его и использовал бы JNA.

JNA (Собственный Доступ Java), в основном делает во времени выполнения, что JNI во время компиляции и не нужен никакой код не-Java (не много Java ни один).

Я не знаю о его производительности или удобстве использования в Вашем случае, но я дал бы ему попытку.

4
ответ дан 4 December 2019 в 11:09
поделиться

На Java GNU Научный проект Библиотеки я использовал Большой глоток для генерации классов обертки JNI вокруг библиотек C. Большой инструмент, и может также сгенерировать код обертки на нескольких языках включая Python.Очень рекомендуем.

11
ответ дан 4 December 2019 в 11:09
поделиться

Ну, существует AMPC. Это - компилятор C для Windows, MacOS X и Linux, который может скомпилировать код C в байт-код Java (вид кода, который работает на виртуальной машине Java).

AMPC

Однако это является коммерческим и стоит 199$ за лицензию. Я сомневаюсь, что это окупается для Вас ;) Я не знаю ни о каком бесплатном компиляторе как этот.

OTOH, Java и C довольно подобны. Вы могли, вероятно, осуществить рефакторинг Код C к Java (структуры могут быть заменены объектами с общедоступными переменными экземпляра), и операции указателя могут обычно переводиться во что-то еще (операции над массивом, например). Хотя я предполагаю, что Вы не хотите проходить 5 000 строк кода, не так ли?

Используя JNI делает зависимого платформы кода, однако если Вы говорите, что это - независимый от платформы C, нет никакой причины, почему Ваш код Java должен быть зависимым платформы. OTOH, в зависимости от того, насколько дорогостоящий эти вычисления, с помощью JNI, мог бы на самом деле купить Вас увеличение производительности, как тогда, когда это приходит к необработанной пропускной способности перемалывания чисел, C может все еще разбить Java в скорости. Однако вызовы JNI являются очень дорогостоящими, поэтому если вычисление является просто очень простым, быстрым вычислением, сам вызов JNI мог бы брать одинаково долго (или еще дольше), чем выполненное вычисление, в этом случае использующий JNI купит Вас ничто, но замедление Вашего приложения и порождение памяти наверху.

0
ответ дан 4 December 2019 в 11:09
поделиться

Действительно, JNA выглядит впечатляющим, требуется меньше усилия, чем прямое использование JNI. Но в любом случае Вы потеряли бы независимость от платформы, и так как Вы, вероятно, только используете небольшую часть ее, Вы могли бы рассмотреть перевод, в чем Вы на самом деле нуждаетесь.

0
ответ дан 4 December 2019 в 11:09
поделиться

Имейте Вас, пытался использовать:

System.loadLibrary("mylibrary.dll");

Не уверенный, если это будет работать с чистой библиотекой C, но это, вероятно, стоит того, чтобы попытаться.:)

-2
ответ дан 4 December 2019 в 11:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: