Преобразование исполняемой программы на С ++ в общий объект - PullRequest
0 голосов
/ 02 июня 2011

У меня странная проблема .. У меня есть исходный код программного обеспечения JAGS, который я могу скомпилировать в Solaris i86, и он генерирует исполняемый файл .. И он работал нормально ... Теперь проблема

  1. Я хочу вызвать этот исполняемый файл из JAVA и пожелать, чтобы я смог это сделать ..
  2. Теперь я хочу использовать тот же исходный код без исполняемого файла и хочу создать общий объект, который может быть запущенот java usin JNI.

Можно ли изменить файл make и сгенерировать общий объект вместо исполняемого файла?

1 Ответ

0 голосов
/ 21 июня 2011

Вы можете вызвать исполняемый файл из Java. Просто вопрос:

String[] cmd = { "/path/to/program", "arg1", "arg2" };
Process proc = Runtime.getRuntime().exec( cmd );

Затем можно использовать proc для связи с командой через стандартные потоки ввода-вывода и ожидания ее завершения.

Теперь, если вы хотите пойти по пути JNI, вам нужно написать некоторый дополнительный код, который будет действовать как уровень JNI между java и C. Этот уровень отвечает за отслеживание выделенной памяти C и преобразование между данными C типы и типы данных Java. Затем этот слой сможет вызывать функции из вашего другого исходного кода (но, вероятно, не основной функции). Затем вам нужно изменить / создать make-файл, который связывает ваш новый исходный код слоя JNI с исходным кодом, который у вас уже есть, в .dll / .so. Затем вам нужно написать класс (ы) java, которые находятся на вашем слое JNI.

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

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