简单分布式Erlang

简单分布式Erlang,erlang,distributed,Erlang,Distributed,我有一个简单的模块: -module(dist). -compile([add/3]). add(From,X,Y) -> From ! X+Y. 我开始两个节点 一个 erl -sname foo 还有一个 erl -sname bar 在我正在执行的条形图节点上: > c(dist). {ok,dist} > self(). <0.37.0> > spawn('foo@unknown-00-23-6c-83-af-bd', dist, ad

我有一个简单的模块:

-module(dist).
-compile([add/3]).
add(From,X,Y) ->
    From ! X+Y.
我开始两个节点

一个

erl -sname foo 
还有一个

erl -sname bar
在我正在执行的条形图节点上:

> c(dist).
{ok,dist}
> self().
<0.37.0>
> spawn('foo@unknown-00-23-6c-83-af-bd', dist, add, [self(), 3, 5]).
>c(dist)。
{好的,dist}
>self()。
>产卵('foo@unknown-00-23-6c-83-af-bd',dist,add,[self(),3,5])。
但我得到的答复是:

Error in process <0.48.0> on node 'foo@unknown-00-23-6c-83-af-bd' with exit value: {undef,[{dist,add,[<8965.37.0>,3,5]}]}
节点上的进程出错'foo@unknown-00-23-6c-83-af-bd',退出值:{unde,[{dist,add,[,3,5]}]

这个错误意味着什么?我想知道这是否意味着我的foo节点没有定义这个模块?我认为它不需要它,但是在foo节点中编译dist并没有解决这个问题,所以我想这不是问题所在。

导出add/3。而不是编译选项

-export([add/3]).

如果在第一个节点中使用nl(模块),则该模块的梁将加载到所有连接的节点

或使用-compile(全部导出)。(仅在早期开发期间)似乎我仍然必须在两个节点中编译dist模块。这就是它应该如何工作的吗?两个节点都在同一台机器上以相同的工作目录运行吗?否则,第二个VM必须以某种方式访问beam文件。