Erlang编译 - 作为独立可执行文件的Erlang

26

有没有一种方法可以将Erlang编译为独立的可执行文件?也就是说,运行它时无需Erlang运行时。


该链接的网站目前不支持exe文件。 - yazzapps.com
@qwerty。最终你找到一个可行的答案了吗? - yazzapps.com
2个回答

16

尽管可以将所有内容打包为单个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的副本,这只是一个实现细节。


10
我刚刚简单地尝试了一下,看起来你可以将Erlang运行时缩小到不到2MB。你只需要在安装Erlang的目录下的erts-VERSION/bin目录中使用一些文件子集。 我只使用了beam.smp.dll、epmd.exe、erl.exe、erl.ini、erlexec.dll、erlsrv.exe和heart.exe,似乎可以工作。其中一些是可选的。我不确定仅使用beam.smp.dll而不是beam.dll,或者反过来,是否合适;你可能真的需要两个都有。这将使您的占用空间增加到未压缩的3MB。现在看起来很小。 - Warren Young
2
Riak 打包成应用程序了吗? - CMCDragonkai

2
您可以使用 Warp。我已为封装Erlang发布版添加了示例。
最初的回答:使用Warp可以实现此目的,并提供了封装Erlang发布的示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接