2009-11-25 21 views
23

¿hay alguna manera de compilar Erlang para ser un ejecutable independiente? esto significa, para ejecutarlo como un exe sin el tiempo de ejecución de Erlang.compilación Erlang - Erlang como ejecutable solo

+0

el sitio que está vinculado a las ayudas de soporte inexistentes aún – Zubair

+0

@qwerty. ¿Encontraste una respuesta que funciona al final? – Zubair

Respuesta

14

Si bien es posible envolver todo en un solo archivo EXE, no vas a evitar tener un tiempo de ejecución de Erlang. Por ejemplo, los lenguajes dinámicos como Erlang no se pueden compilar en el código x86 nativo, debido a su naturaleza. Tiene que haber un intérprete allí en alguna parte.

Es posible crear un esquema que agrupe el intérprete y todos los archivos BEAM en un solo EXE, puede hacer doble clic y ejecutarlo directamente, pero probablemente sea más trabajo de lo que deseaba. Lo he visto antes, pero rara vez hay una buena razón para hacerlo, así que no me molestaré en entrar en detalles sobre las técnicas aquí.

En su lugar, sugiero que use la misma técnica que usan para los programas py2exe y py2app de Python para crear ejecutables de Windows y Mac OS X, respectivamente. Estos programas cargan el módulo principal del programa en un intérprete de Python, determinan qué otros módulos necesita utilizando los mecanismos de reflexión incorporados en el lenguaje, luego escriben todos esos módulos compilados junto con una copia del intérprete de lenguaje y un pequeño programa de envoltura que inicia el módulo principal del programa con el intérprete. El directorio que contiene esos archivos es entonces un entorno independiente, que tiene todo lo necesario para ejecutar el programa. La única diferencia en el caso Erlang es que python.exe se convierte en erl.exe y * .pyc se convierte en * .beam. La idea básica sigue siendo la misma.

Puede simplificar esto si no lo necesita para trabajar con cualquier programa de Erlang arbitrario, pero solo el suyo. En ese caso, solo copie el intérprete de Erlang y todos los archivos .beam que componen su programa en un único directorio. Puede hacer que esta parte del Makefile de su programa, por ejemplo.

Puede utilizar su método de creación setup.exe o MSI favorito para crear un paquete distribuible que instala esta colección de archivos en c:\Program Files\MyProgram en el sistema del usuario final y crea un atajo para "erl mainmodule.beam" en su menú Inicio . Al usuario final no le importa que, como parte del programa, también obtenga una copia de Erlang. Eso es un detalle de implementación.

+9

Acabo de hacer un truco rápido en esto, y parece que puede obtener el tiempo de ejecución de Erlang a menos de 2 MB. Todo lo que necesita es un subconjunto de los archivos en el directorio erts-VERSION/bin debajo del directorio en el que instaló Erlang. Obtuve algo que parece funcionar usando solo beam.smp.dll, epmd.exe, erl.exe, erl. ini, erlexec.dll, erlsrv.exe y heart.exe. Algunos de ellos parecen ser opcionales. No estoy seguro de qué tan kosher es enviar solo beam.smp.dll y no beam.dll, o viceversa; es posible que realmente necesite ambos. Eso te lleva hasta 3 MB sin comprimir. Tiny, estos días. –

+1

¿Riak no se prepara como una aplicación? – CMCDragonkai