Создание JVM из C - PullRequest
       4

Создание JVM из C

3 голосов
/ 06 октября 2011

Как запустить Java VM из C? Написание кода на C кажется довольно простым - я следовал коду, показанному на p. 84 из "Нативного интерфейса Java" Ляна. Это процесс связывания, который блокирует меня. В этом отношении книга Ляна устарела на 10 с лишним лет, и я не могу найти в сети ничего, что могло бы решить эту задачу (и которая работает).

Чтобы было ясно, я хочу запустить стандартную программу Windows (написанную на C), которая затем запускает JVM и вызывает main () в классе Java (который я написал). Эта программа не должна полагаться на наличие jvm.dll или jvm.lib - пользователю не нужно устанавливать Java для запуска программы. Возможно, это невозможно без чрезмерных усилий.

Среда разработки - MinGW под windows. Я могу связать таким образом, что программа работает, когда .dll находится в отдельном файле, но не таким образом, что есть только один исполняемый файл без каких-либо .dll или .libs.


Оглядываясь назад, теперь я вижу, что это был тупой вопрос или, по крайней мере, тот, который не был продуман. Мораль этой истории заключается в том, что JVM - это не один исполняемый файл или даже исполняемый файл плюс некоторые JAR-файлы; JVM опирается на множество независимо хранимых файлов с различными взаимозависимостями. Разобрать все эти отношения, чтобы их можно было объединить в один файл (или даже в два файла), было бы непросто. Спасибо за стук в голову.

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Отказ от ответственности: я не думаю, что установка среды выполнения Java нецелесообразна для пользователей.Тем не менее, я понимаю ваши мотивы для установки с низким коэффициентом трения для пользователей.

Использование Sun JRE, вероятно, не будет плодотворным здесь.Теоретически, вы можете взять Sun JRE, изменить его для создания статической библиотеки вместо библиотеки DLL и найти способ объединить все ресурсы, связанные с ним (шрифты, изображения, курсоры, сертификаты SSL, локализованные файлы сообщений).и т. д.) в один ресурс, а затем измените среду выполнения для загрузки оттуда.Но это почти наверняка «неоправданное количество усилий».

Возможно, вы захотите вместо этого взглянуть на GCJ: его архитектура отличается от Sun JRE, которая больше подходит для встраивания в другое приложение, или можетскомпилируйте Java на собственный машинный код.

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

1 голос
/ 06 октября 2011

Итак, чтобы быть ясным - вы хотите запустить JVM без присутствия JVM?Как вы предлагаете это сделать?Если вы не планируете писать свою собственную реализацию JVM (которая, я бы сказал, подпадает под категорию «неоправданное количество усилий»), разумным требованием является установка JVM.Предполагая, что вы можете просто запустить процесс Java и включить соответствующие параметры командной строки (classpath, класс для запуска и т. Д.).

...