【问题标题】:Using Erlang library with Elixir将 Erlang 库与 Elixir 一起使用
【发布时间】:2015-12-16 05:04:46
【问题描述】:

我在 Elixir 项目中尝试使用 Erlang 库时遇到了一个小问题。 有问题的库是用于 ISO-8583 消息打包和解包的erl8583

我找到了erl8583 的 github 存储库,并将我的 mix.exs 调整为以下内容:

defmodule Iso.Mixfile do
  use Mix.Project

  def project do
    [app: :iso,
     version: "0.0.1",
     elixir: "~> 1.0",
     build_embedded: Mix.env == :prod,
     start_permanent: Mix.env == :prod,
     deps: deps]
  end

  def application do
    [applications: [:logger]]
  end

  defp deps do
    [{:erl8583, github: "mgwidmann/erl8583"}]
  end
end

当我运行mix deps.getmix deps.compile 时,它运行平稳。

然后,我尝试使用iex -S mix 启动 IEx 会话,并收到以下错误:

Unchecked dependencies for environment dev:
* erl8583 (git://github.com/mgwidmann/erl8583.git)
  could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app. This may happen if the dependency was not yet compiled, or you specified the wrong application name in your deps, or the dependency indeed has no            app file (then you can pass app: false as option)
** (Mix) Can't continue due to errors on dependencies

上面写着could not find an app file at _build/dev/lib/erl8583/ebin/erl8583.app。据我了解,mix 应该刚刚从 deps/erl8583/src 获取该文件并将其包含在其中(该文件存在,我检查过)。

我尝试手动将文件从deps 复制到_build,但没有成功。我做错了什么?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    erl8583 应用程序的源 .app 文件命名错误。 .app 文件通常位于 Erlang 应用程序的 ebin 目录中;如果它是用于生成.app 文件的源文件,则应将其命名为.app.src。如果您重命名它,它将起作用,如下面的 shell 会话所示:

    $ mix deps.get
    * Getting erl8583 (https://github.com/mgwidmann/erl8583.git)
    Cloning into '/private/tmp/m/deps/erl8583'...
    remote: Counting objects: 3468, done.
    remote: Compressing objects: 100% (4/4), done.
    remote: Total 3468 (delta 1), reused 0 (delta 0), pack-reused 3464
    Receiving objects: 100% (3468/3468), 1002.71 KiB | 618.00 KiB/s, done.
    Resolving deltas: 100% (2640/2640), done.
    Checking connectivity... done.
    $ mv ./deps/erl8583/src/erl8583.app ./deps/erl8583/src/erl8583.app.src
    $ mix deps.compile
    ==> erl8583 (compile)
    Compiled src/erl8583_message_helpers.erl
    Compiled src/erl8583_message.erl
    Compiled src/erl8583_marshaller_xml.erl
    Compiled src/erl8583_marshaller_ebcdic.erl
    Compiled src/erl8583_marshaller_json.erl
    Compiled src/erl8583_marshaller_binary.erl
    Compiled src/erl8583_marshaller_ascii.erl
    Compiled src/erl8583_fields_2003.erl
    Compiled src/erl8583_fields_1993.erl
    Compiled src/erl8583_fields.erl
    Compiled src/erl8583_marshaller.erl
    src/erl8583_convert.erl:133: Warning: variable 'AsciiHex' is unused
    src/erl8583_convert.erl:136: Warning: variable 'IntValue' is unused
    Compiled src/erl8583_convert.erl
    $ iex -S mix
    Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false]
    
    Generated iso app
    Interactive Elixir (1.1.0-rc.0) - press Ctrl+C to exit (type h() ENTER for help)
    iex(1)>
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 2016-08-30
      • 2015-12-09
      • 2018-08-13
      • 2016-06-25
      • 1970-01-01
      • 2015-10-25
      • 2013-09-16
      相关资源
      最近更新 更多