在Mac上发布Erlang应用程序以在Linux上运行?

在Mac上发布Erlang应用程序以在Linux上运行?,erlang,Erlang,是跨平台发布的,因此我可以在一个平台上构建发布,然后在另一个平台上运行它,或者我应该在运行应用程序的同一个平台上构建它?前提是这些平台具有相同的OTP版本:是。beam文件应该跨平台兼容,因为它是解释字节码的Erlang VM。就像.class文件和JVM一样 对于不同版本的平台,它向后兼容2个主要版本。也就是说,如果您在使用R16B的OSX机器上发布,它应该与运行OTP17和18的任何机器兼容 然而,这两种情况都不适用于编译的本机代码或NIF。发布机制至少需要额外的工作才能使其跨平台 虽然Er

是跨平台发布的,因此我可以在一个平台上构建发布,然后在另一个平台上运行它,或者我应该在运行应用程序的同一个平台上构建它?

前提是这些平台具有相同的OTP版本:是
。beam
文件应该跨平台兼容,因为它是解释字节码的Erlang VM。就像
.class
文件和JVM一样

对于不同版本的平台,它向后兼容2个主要版本。也就是说,如果您在使用R16B的OSX机器上发布,它应该与运行OTP17和18的任何机器兼容


然而,这两种情况都不适用于编译的本机代码或NIF。

发布机制至少需要额外的工作才能使其跨平台

虽然Erlang
beams
是跨平台的,但发布版通常包含可能依赖于平台的附加数据

是的

  • Erts本身
  • 依赖平台的库
如果您想在Mac上为Linux构建发行版,您至少需要为Linux构建Erts。例如,如果您使用的是
relx
,则必须使用它

其他依赖于平台的库则是另一回事。几乎每一个复杂的Erlang应用程序都使用一些NIF或端口,它们通常随发布而来,并位于
priv
s中。如果您使用任何一个,您必须为您的目标平台交叉编译它们。你可能得自己处理

{include_erts, "/path/to/erlang"},
{system_libs, "/path/to/erlang"},