【问题标题】:Use external libraries in erlang application在 erlang 应用程序中使用外部库
【发布时间】:2013-10-25 21:45:45
【问题描述】:

在我的 Erlang 应用程序中,我想使用外部库 (erlzmq2)。我是 erlang 的新手,不知道如何打包或编译它。目前我正在使用 rebar 进行编译,如果答案是基于编辑 rebar.config 文件,那对我来说会更有用。

【问题讨论】:

    标签: erlang zeromq


    【解决方案1】:

    幸运的是,您的库似乎是 rebar 打包的,因为它在其 repo 的根目录中有一个 rebar.confighttps://github.com/zeromq/erlzmq2

    假设您尚未配置依赖项,您只需将其添加到您自己的rebar.config

    {deps, [
       {erlzmq2, "2.*", {git, "git://github.com/zeromq/erlzmq2", {tag, "2.1.11"}}}
    ]}.
    

    这适用于添加“2.1.11”版本。你也可以只对着头工作:

    {deps, [
       {erlzmq2, "3.*", {git, "git://github.com/zeromq/erlzmq2"}}
    ]}.
    

    “deps”条目的格式是

    • 应用程序的名称,如其 x.app 文件中所示 (erlzmq2.app.src line 1)
    • 与 x.app 文件 (erlzmq2.app.src, line 4) 中的“vsn”匹配的正则表达式。如果您想绕过此完整性检查,可以使用“.*”。
    • 一个元组,给出了可以从中获取依赖项的位置。对于git,除了URL 之外,您还可以给它一个branchtag 元组。

    我认为,使用 Rebar 和 Reltool 打包您的应用程序是一个全新的问题,而且是一个复杂的问题。但如果您的应用程序相当小/一次性/非正式,您可以尝试 Rebar 的“escriptize”命令。

    如果您的应用程序是“foo”,则您需要在 src 中有一个 foo.erl 并具有相应的 main/1。然后添加到您的rebar.config

    {escript_incl_apps, [erlzmq2]}.
    

    并从命令行(在获得代表和编译之后)运行

    钢筋脚本化

    Rebar 会将您的所有二进制文件和“encrypt_incl_apps”的二进制文件填充到作为可执行文件运行的单个文件中。

    【讨论】:

    • 当库位于本地文件系统时,第三个字段(元组)是什么?是/lib/。放置外部库的理想位置??
    • 您是否进行了本地修改?您是否在一个 1k 磁盘空间非常宝贵的系统上?您是否在没有网络访问权限的系统上?如果这些都不是,我建议使用引用远程库的标准 Rebar 实践。
    • 好的,我将使用参考的标准做法。我能够使用我的应用程序成功构建 erlzmq。但是当我在我的代码中引用它时,比如“Context=erlzmq:context()”,它会通过抱怨“模块无法加载”而终止。我怀疑这是一些链接问题,你知道如何正确运行它吗?
    • 我觉得你正在误入新问题领域,因为现在问的是如何打包应用程序,对吧?我已经用小应用程序的快捷解决方案更新了我的答案。
    【解决方案2】:

    只是为了获得更多附加信息,如果这与钢筋不兼容,您可以创建一个名为 lib 的单独文件夹并将 lib 路径导出到 ERL_LIBS。如果库足够好,您可以将其放在 OTP lib 目录中,但不推荐!

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2013-12-22
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多