由于返回错误,无法启动Erlang应用程序
我有一个简单的erlang应用程序,我正在尝试启动它,但没有得到一个错误的返回:由于返回错误,无法启动Erlang应用程序,erlang,Erlang,我有一个简单的erlang应用程序,我正在尝试启动它,但没有得到一个错误的返回: > {error, > {bad_return, > {{mapp,start,[normal,[]]}, > {'EXIT', > {undef, > [{mapp,start,[normal,[]],[]}, > {applicati
> {error,
> {bad_return,
> {{mapp,start,[normal,[]]},
> {'EXIT',
> {undef,
> [{mapp,start,[normal,[]],[]},
> {application_master,start_it_old,4,
> [{file,"application_master.erl"},{line,277}]}]}}}}}
.app
{
application,mapp,
[
{vsn,"1.0.0"},
{description,"some description"},
{mod,{mapp,[]}},
{modules,[mapp,m1]}
]
}.
文件夹结构:
-root
-mapp.app
-src
-m1.erl
-mapp.erl
-include
-state.hrl
-ebin
应用程序
-module(mapp).
-behaviour(application).
-export([start/2,stop/1]).
start(normal,_Args)->
Pid=m1:start_link(),
{ok,Pid}.
stop(State)->ok.
模块
-module(m1).
-include("r.hrl").
-export([start_link/0]).
start_link()->
Pid=spawn_link(?MODULE,serv,#state{count=2}),
Pid.
serv(State=#state{count=C})->
receive
{From,MSG} ->From ! {ok,MSG},
serv(State#state{count=C=1})
end.
.hrl
-record(state,{
count=0
}).
因此,我的m1
模块返回一个Pid
。我遵循应用程序:start/2
返回类型并返回一个{ok,Pid}
。
这里怎么了?我用
Pid
和{ok,Pid}
尝试了这两种方法,但都没有效果。错误表明mapp:start/2
是undef
。看到您的mapp.erl
导出它,我怀疑模块mapp
没有加载
你是如何运行这个应用程序的?我怀疑您没有使用像
rebar3
或erlang.mk
这样的发布工具,因为应用程序文件通常位于src中。错误表明mapp:start/2
未定义。看到您的mapp.erl
导出它,我怀疑模块mapp
没有加载
你是如何运行这个应用程序的?我怀疑您没有使用像
rebar3
或erlang.mk
这样的发布工具,因为应用程序文件通常在src中。我只是运行application:load(mapp)
和application:start(mapp)
@bercoviciarian From注意,该函数没有加载erlang对象代码。
。您需要使用一些erlang工具,如rebar3
或erlang.mk
,使用code:load
手动加载代码,或者使用code:add_path*
将代码路径添加到搜索路径,这样我就安装了钢筋(并从cmd和git检查了它,工作正常),然后运行rebar3 co
,并获得=>mapp(编译)
但是在ebin
@bercoviciarian中没有输出任何内容。使用rebar3启动应用程序的最简单方法是运行rebar3 new app
,这将引导应用程序结构。rebar3在\u build
中创建树结构,您应该在那里找到ebin
目录。您可以使用rebar3shell
要在应用程序运行以进行开发时快速启动erlang shell,我只需运行应用程序:加载(mapp)
和应用程序:启动(mapp)
@bercoviciarian From注意,该函数不加载Erlang对象代码。
您需要使用一些Erlang工具,如rebar3
或Erlang.mk
,使用code:load
手动加载代码,或使用code:add\u path*
将代码路径添加到搜索路径,因此我安装了钢筋(并从cmd和git中进行了检查,工作正常)然后运行rebar3 co
,得到=>mapp(编译)
但是在ebin
@bercoviciarian中没有输出任何内容。使用rebar3启动应用程序的最简单方法是运行rebar3 new app
,这将引导应用程序结构。rebar3在\u build
中创建树结构,您应该在那里找到ebin
目录。您可以使用rebar3shell
在应用程序运行以进行开发时快速启动erlang shell