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

Can not start Erlang Application due to bad return error

我有一个简单的 erlang 应用程序,我试图启动它但无济于事得到一个错误的 return 错误:

> {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 模块 return 是 Pid。我遵守 application:start/2 return 类型和 return {ok,Pid}. 这里有什么问题?我尝试了 Pid{ok,Pid} 都无济于事。

错误指出 mapp:start/2undef。看到你的mapp.erl导出了,我怀疑模块mapp没有加载。

你运行申请的怎么样了?我怀疑您没有使用 rebar3erlang.mk 之类的发布工具,因为应用程序文件通常位于 src.