Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation Erlang编译-Erlang作为独立可执行_Compilation_Erlang - Fatal编程技术网

Compilation Erlang编译-Erlang作为独立可执行

Compilation Erlang编译-Erlang作为独立可执行,compilation,erlang,Compilation,Erlang,有没有办法将Erlang编译成独立的可执行文件? 这意味着,在不使用Erlang运行时的情况下将其作为exe运行。虽然可以将所有内容打包到一个exe中,但您无法摆脱Erlang运行时的困扰。例如,像Erlang这样的动态语言不能真正编译成原生x86代码,因为它们的本质。那里一定有个翻译 有可能提出一种方案,将解释器和所有BEAM文件捆绑到一个EXE中,您可以双击并直接运行,但这可能比您想要的要多。我以前见过这样做,但是很少有好的理由这样做,所以我不想在这里详细介绍这些技术 相反,我建议您使用与P

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

虽然可以将所有内容打包到一个exe中,但您无法摆脱Erlang运行时的困扰。例如,像Erlang这样的动态语言不能真正编译成原生x86代码,因为它们的本质。那里一定有个翻译

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

相反,我建议您使用与Python的py2exe和py2app程序相同的技术来分别创建Windows和Mac OS X可执行文件。这些程序将程序的主模块加载到Python解释器中,使用该语言的内置反射机制确定它需要哪些其他模块,然后写出所有这些编译后的模块以及语言解释器的副本和一个小包装程序,该程序用解释器启动程序的主模块。包含这些文件的目录是一个独立的环境,拥有运行程序所需的一切。Erlang案例中唯一的区别是python.exe变为erl.exe,*.pyc变为*.beam。基本思想仍然是一样的

如果您不需要它来处理任何任意的Erlang程序,但只需要您的Erlang程序,那么您可以简化它。在这种情况下,只需将Erlang解释器和构成程序的所有.beam文件复制到一个目录中。例如,您可以将此部分作为程序生成文件的一部分


然后,您可以使用您喜爱的setup.exe或MSI创建方法创建一个可分发包,该包将此文件集合安装到最终用户系统上的
c:\Program files\MyProgram
,并在其开始菜单中创建“erl mainmodule.beam”的快捷方式。最终用户并不关心,作为程序的一部分,他们还可以获得一份Erlang。这是一个实现细节。

您可以使用。我已经添加了包装Erlang发行版的示例。

我刚刚做了一个快速的修改,看起来您可以将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是多么合乎犹太规范,反之亦然;你可能真的需要两者。这将占用最多3 MB的未压缩空间。最近很小。Riak不是捆绑成一个应用程序吗?链接到的网站不支持前男友yet@qwerty. 你找到一个最终有效的答案了吗?