2009-11-25 132 views
23

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

+0

链接到的站点不支持exes – Zubair 2010-04-05 17:52:46

+0

@qwerty。你找到了最终有效的答案吗? – Zubair 2010-04-05 17:54:02

回答

14

尽管可以将所有东西都包装在一个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的副本。这是一个实现细节。

+9

我只是对此做了一个简单的攻击,看起来你可以将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。小,这些天。 – 2009-11-25 16:58:07

+1

Riak不会作为应用程序捆绑吗? – CMCDragonkai 2014-08-03 23:42:33