阅读完这个问题后,Erlang是集群计算世界的C吗?,我想知道正式的Erlang OTP编译HiPE?
换句话说,当我.erl使用OTP版本R13(例如)编译源代码时,它是否会生成"对象代码"BEAM?
查看http://www.it.uu.se/research/group/hipe/,似乎不再维护独立的HiPE编译器.
我一般都是钢筋和二郎的初学者.我试图根据本教程创建一个带有钢筋的erlang版本:http://www.metabrew.com/article/erlang-rebar-tutorial-generating-releases-upgrades并且在运行生成的版本时陷入困境.
我的系统是Ubuntu 11.04 64bit,erlang R14B03,从源头安装.
当我调用'bin/somenode console'时,我收到以下错误之一:
Exec: /home/ghik/Inz/somerel/rel/somenode/erts-5.8.4/bin/erlexec -boot /home/ghik/Inz/somerel/rel/somenode/releases/1/somenode -mode embedded -config /home/ghik/Inz/somerel/rel/somenode/etc/app.config -args_file /home/ghik/Inz/somerel/rel/somenode/etc/vm.args -- console
Root: /home/ghik/Inz/somerel/rel/somenode
{"init terminating in do_boot",{'cannot load',hipe_amd64_encode,get_files}}
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
Run Code Online (Sandbox Code Playgroud)
有趣的是,每次运行它时,都会列出不同的原子而不是'hipe_amd64_encode',例如:'hipe_amd64_defuse','hipe_amd64_assemble'等等.我猜测erlang无法加载hipe,但我不知道为什么是试图加载它的第一个地方.该版本仅包含一个非常简单的应用程序,仅依赖于内核和stdlib.
出于某种原因,rebar会生成一个带有大量不必要应用程序的.rel文件:
%% rel generated at {2011,9,6} {20,5,48}
{release,{"somenode","1"},
{erts,"5.8.4"},
[{kernel,"2.14.4"},
{stdlib,"1.17.4"},
{sasl,"2.1.9.4"},
{someapp,"1"},
{compiler,"4.7.4",load},
{crypto,"2.0.3",load},
{et,"1.4.3",load},
{gs,"1.5.13",load},
{hipe,"3.8",load},
{inets,"5.6",load},
{mnesia,"4.4.19",load},
{observer,"0.9.9",load},
{public_key,"0.12",load},
{runtime_tools,"1.8.5",load},
{ssl,"4.1.5",load},
{syntax_tools,"1.6.7.1",load},
{tools,"2.6.6.4",load},
{webtool,"0.8.8",load},
{wx,"0.98.10",load}]}.
Run Code Online (Sandbox Code Playgroud)
为什么rebar列表会在.rel文件中列出很多应用程序?事件如果没问题,为什么不发布?
与通常的"非本机"编译相比,.erl使用该+native选项编译Erlang 源时有哪些限制/约束?
是否可以让VM实例同时执行HiPE代码和通常的"基于操作码"的对象?
这个问题与以下相关:Erlang OTP版本与HiPE编译?