Erlang编译 - Erlang独立可执行

qwe*_*rty 25 erlang compilation

有没有办法将Erlang编译为独立的可执行文件?这意味着,在没有Erlang运行时的情况下将其作为exe运行.

War*_*ung 15

虽然可以在一个EXE中包装所有内容,但您不会放弃使用Erlang运行时.例如,Erlang等动态语言无法真正编译为本机x86代码,因为它们的性质.那里必须有一名翻译.

有可能提出一种方案,将解释器和所有BEAM文件捆绑到一个EXE中,您可以双击并直接运行,但这可能比您想要的更多.我以前见过它,但很少有理由这样做,所以我不打算详细介绍这里的技术.

相反,我建议你使用他们用于Python的py2exe和py2app程序的相同技术来分别创建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的副本.这是一个实现细节.

  • 我刚刚对此进行了快速破解,看起来你可以将Erlang运行时降低到2 MB以下.您只需要安装Erlang的目录下的erts-VERSION/bin目录中的文件的子集.我得到的东西看起来只能使用beam.smp.dll,epmd.exe,erl.exe,erl. ini,erlexec.dll,erlsrv.exe和heart.exe.其中一些似乎是可选的.我不确定如何运送beam.smp.dll而不是beam.dll,反之亦然; 你可能真的需要两者.这将使您最多3 MB未压缩.这几天很小. (10认同)
  • Riak不是一个应用程序捆绑? (2认同)