Erlang 包加载失败
Erlang package failing to load
我想在我的 Phoenix 项目中使用 Erlang 包(这个:https://github.com/komone/qrcode),所以我只是想从我的混合文件中获取它:
defp deps do
[{:phoenix, "~> 1.3.0-rc"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:comeonin, "~> 3.0"},
{:uuid, "~> 1.1"},
{:timex, "~> 3.1"},
{:timex_ecto, "~> 3.1"},
{:porcelain, "~> 2.0"},
{:qrcode, git: "https://github.com/komone/qrcode"}, # <--
{:credo, "~> 0.7", only: [:dev, :test]}]
end
我不得不在获取的目录中手动 erl -make
以使其编译,但在 phoenix 启动时我收到以下错误:
** (Mix) Could not start application qrcode: exited in: :qrcode.start(:normal, [])
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function :qrcode.start/2 is undefined or private
(qrcode) :qrcode.start(:normal, [])
(kernel) application_master.erl:273: :application_master.start_it_old/4
是否还有其他步骤才能让它发挥作用?
编辑
我下面的示例是将 Erlang 源代码包含在 Elixir 项目中,而不是作为所问问题的依赖项。我将 post 留在这里,以防它可以帮助其他人如何尝试编译他们的 Erlang 代码。
我完成它已经有一段时间了,但回顾以前的项目,我在 mix.exs
文件中看到以下内容:
def project do
[ app: :mdse,
# ...
erlc_paths: ["./lib/mdse/rpc/src", "src"]
]
end
这应该会自动编译 mix。
查看您提供的 qrcode
的来源后,它不是应用程序。所以我认为您无法将其添加到您的 applications:
列表中。相反,你应该能够像 :qrcode.encode(...)
.
这样的任何 Erlang 库来使用它
刚刚找到方便的混合选项来传递:
{:qrcode, git: "https://github.com/komone/qrcode", app: false}
为了防止Mix尝试加载包应用文件。
https://hexdocs.pm/mix/Mix.Tasks.Deps.html
注意:您可以使用 :compile
选项来摆脱 Emakefile 包的手动编译,在这种情况下:
{:qrcode, git: "https://github.com/komone/qrcode", app: false, compile: "erl -make"}
我想在我的 Phoenix 项目中使用 Erlang 包(这个:https://github.com/komone/qrcode),所以我只是想从我的混合文件中获取它:
defp deps do
[{:phoenix, "~> 1.3.0-rc"},
{:phoenix_pubsub, "~> 1.0"},
{:phoenix_ecto, "~> 3.2"},
{:postgrex, ">= 0.0.0"},
{:gettext, "~> 0.11"},
{:cowboy, "~> 1.0"},
{:comeonin, "~> 3.0"},
{:uuid, "~> 1.1"},
{:timex, "~> 3.1"},
{:timex_ecto, "~> 3.1"},
{:porcelain, "~> 2.0"},
{:qrcode, git: "https://github.com/komone/qrcode"}, # <--
{:credo, "~> 0.7", only: [:dev, :test]}]
end
我不得不在获取的目录中手动 erl -make
以使其编译,但在 phoenix 启动时我收到以下错误:
** (Mix) Could not start application qrcode: exited in: :qrcode.start(:normal, [])
** (EXIT) an exception was raised:
** (UndefinedFunctionError) function :qrcode.start/2 is undefined or private
(qrcode) :qrcode.start(:normal, [])
(kernel) application_master.erl:273: :application_master.start_it_old/4
是否还有其他步骤才能让它发挥作用?
编辑
我下面的示例是将 Erlang 源代码包含在 Elixir 项目中,而不是作为所问问题的依赖项。我将 post 留在这里,以防它可以帮助其他人如何尝试编译他们的 Erlang 代码。
我完成它已经有一段时间了,但回顾以前的项目,我在 mix.exs
文件中看到以下内容:
def project do
[ app: :mdse,
# ...
erlc_paths: ["./lib/mdse/rpc/src", "src"]
]
end
这应该会自动编译 mix。
查看您提供的 qrcode
的来源后,它不是应用程序。所以我认为您无法将其添加到您的 applications:
列表中。相反,你应该能够像 :qrcode.encode(...)
.
刚刚找到方便的混合选项来传递:
{:qrcode, git: "https://github.com/komone/qrcode", app: false}
为了防止Mix尝试加载包应用文件。
https://hexdocs.pm/mix/Mix.Tasks.Deps.html
注意:您可以使用 :compile
选项来摆脱 Emakefile 包的手动编译,在这种情况下:
{:qrcode, git: "https://github.com/komone/qrcode", app: false, compile: "erl -make"}