Являются ли выпуски кроссплатформенными, чтобы я мог создавать выпуск на одной платформе и запускать его как есть на другой, или мне следует создавать на той же платформе, на которой я собираюсь запускать приложение?
Сделать выпуск приложения Erlang на Mac, чтобы запустить его в Linux?
Ответы:
Механизм релизов требует как минимум дополнительной работы, чтобы сделать его кроссплатформенным.
Хотя Erlang beams
является кроссплатформенным, выпуски обычно содержат дополнительные данные, которые могут зависеть от платформы.
It is
- Эрц сам.
- Библиотеки, зависящие от платформы
Если вы хотите собрать выпуск для Linux на Mac, вам как минимум понадобится сборка Erts для Linux. Например, если вы используете relx
, вам нужно будет указать его с помощью
{include_erts, "/path/to/erlang"},
{system_libs, "/path/to/erlang"},
Дополнительные библиотеки, зависящие от платформы, — это отдельная история. Почти каждое сложное приложение Erlang использует некоторые NIF или порты, которые обычно поставляются с релизом и находятся в priv
s. Если вы их используете, вам придется кросс-компилировать их для вашей целевой платформы. Вам придется справиться с этим самостоятельно, вероятно,
При условии, что эти платформы имеют одинаковую версию OTP: Да .beam
файлы должны быть совместимы на разных платформах, потому что это виртуальная машина Erlang, которая интерпретирует байт-код. Так же, как файлы .class
и JVM.
Для платформ с разными версиями он обратно совместим с двумя основными выпусками. Это означает, что если вы сделали выпуск на компьютере с OS X с R16B, он должен быть совместим с любыми компьютерами, на которых запущены OTP 17 и 18. Источник
Однако оба случая не применяются к скомпилированному собственному коду или NIF.