由于返回错误,无法启动Erlang应用程序

由于返回错误,无法启动Erlang应用程序,erlang,Erlang,我有一个简单的erlang应用程序,我正在尝试启动它,但没有得到一个错误的返回: > {error, > {bad_return, > {{mapp,start,[normal,[]]}, > {'EXIT', > {undef, > [{mapp,start,[normal,[]],[]}, > {applicati

我有一个简单的erlang应用程序,我正在尝试启动它,但没有得到一个错误的返回:

> {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