2009-11-25 6 views
23

Есть ли способ скомпилировать Erlang как автономный исполняемый файл? это означает, что он запускается как exe без времени выполнения Erlang.Сборник Erlang - Erlang как самостоятельный исполняемый

+0

сайт, на котором есть ссылки, не поддерживает exes – Zubair

+0

@qwerty. Вы нашли ответ, который работает в конце? – Zubair

ответ

14

Хотя можно обернуть все в одном EXE, вам не удастся избежать времени выполнения Erlang. Динамические языки, такие как Erlang, на самом деле не могут быть скомпилированы на собственный код x86, например, из-за их характера. Там где-то должен быть переводчик.

Возможно создать схему, которая связывает интерпретатор и все файлы BEAM в одном EXE, который вы можете дважды щелкнуть и запустить напрямую, но это, вероятно, больше работы, чем вы хотели. Я видел, как это делалось раньше, но для этого редко есть веская причина, поэтому я не буду подробно останавливаться на методах здесь.

Вместо этого я предлагаю использовать ту же технику, что и для программ py2exe и py2app для Python для создания исполняемых файлов Windows и Mac OS X соответственно. Эти программы загружают основной модуль программы в интерпретатор Python, вычисляют, какие другие модули ему нужны, используя встроенные механизмы отражения языка, затем записывают все эти скомпилированные модули вместе с копией интерпретатора языка и небольшой программой-оболочкой, которая запускает основной модуль программы с помощью интерпретатора. Каталог, содержащий эти файлы, является автономной средой, имеющей все необходимое для запуска программы. Единственное отличие в случае Erlang заключается в том, что python.exe становится erl.exe, а * .pyc становится * .beam. Основная идея остается прежней.

Вы можете упростить это, если вам не нужна его для работы с любой программой Erlang, но только с вашей. В этом случае вы просто копируете интерпретатор Erlang и все .beam-файлы, которые составляют вашу программу в один каталог. Вы можете сделать эту часть Makefile вашей программы, например.

Затем вы можете использовать свой любимый метод создания setup.exe или MSI для создания дистрибутивного пакета, который устанавливает эту коллекцию файлов в c:\Program Files\MyProgram в системе конечного пользователя и создает ярлык для «erl mainmodule.beam» в меню «Пуск» , Конечным пользователям все равно, что в рамках программы они также получат копию Erlang. Это деталь реализации.

+9

Я просто быстро взломал это, и похоже, вы можете получить время работы Erlang до менее 2 МБ. Все, что вам нужно, это подмножество файлов в каталоге erts-VERSION/bin под каталогом, в котором вы установили Erlang. Я получил что-то, что работает, используя только beam.smp.dll, epmd.exe, erl.exe, erl. ini, erlexec.dll, erlsrv.exe и heart.exe. Некоторые из них кажутся необязательными. Я не уверен, как кошерно отправлять только файл beam.smp.dll, а не beam.dll, или наоборот; вам действительно понадобятся оба. Это занимает до 3 МБ несжатого. Крошечный, в эти дни. –

+1

Не собирается ли Riak как приложение? – CMCDragonkai

Смежные вопросы