【问题标题】:Ejabberd right way to compiling custom modulesEjabberd 编译自定义模块的正确方法
【发布时间】:2016-02-09 10:52:16
【问题描述】:

在 /opt/ejabberd 目录下的 ubuntu 14.04 机器上编译并安装 ejabberd 版本 15.10。

在旧版本中,可以直接使用 erlc 命令编译模块,然后粘贴到 ejabberd 模块目录(或符号链接),这是开发模块的非常有效的方式。

但是在使用 logger.hrl 中的 INFO_MSG()/2 升级到较新的 ejabberd 版本后,ejabberd 无法加载模块。

按照https://www.ejabberd.im/ejabberd-13.10ejabberd how to compile new module 的建议,通过将模块文件放在ejabberd src 目录中并在ejabberd 目录中运行make 进行编译时,模块可以工作。

但这与直接使用 elrc 命令编译和运行模块的旧方法相比效率非常低。

后一种方法是正确的方法吗,如果是,为什么要更改,以及解释使用后一种方法进行编译的官方文档在哪里。

【问题讨论】:

  • 什么是你不喜欢的方式“低效”?
  • 使用 make 命令大约需要 9 秒。当使用涉及在单个模块文件上使用 erlc 命令的前一种方法时,它要快得多,大约 3 秒。

标签: erlang ejabberd


【解决方案1】:

你可以像这样编译 ejabberd 模块

erlc -I /lib/ejabberd/include -o /lib/ejabberd/ebin   /home/sunil/Documents/ejabberd_custom_modules/mod_profile.erl

在本例中,/lib/ejabberd/include 是头文件 (.hrl) 路径,/lib/ejabberd/ebin* 是 ejabberd 的二进制文件路径,'/home/sunil /Documents/ejabberd_custom_modules/mod_profile.erl 是源文件路径。

【讨论】:

    【解决方案2】:

    编译自定义 ejabberd 模块的正确方法(由 process-one 建议)是:-

    • 将您的模块放入 ejabberd/src 文件夹。
    • 进入终端中的ejabberd目录并运行命令$ sudo make

    它将显示您的模块已编译。您可以检查 ebin 目录中的 .beam 文件,该文件是您的编译结果。

    现在运行你的模块

    $ sudo make install
    

    将您的模块添加到 /etc/ejabberd/ejabberd.yml 的配置文件中 重新启动您的 ejabberd,您的自定义模块将运行。

    用 erlang shell 编译的另一种方法是:- 启动您的 erlang 以从 ebin 目录加载 ejabberd 模块所需的所有包含文件。

    > erl -pa <your path to ejabberd/ebin>
    

    如果您包含来自多个位置的文件,您还可以提供多个路径,以空格分隔。喜欢

    > erl -pa <path1/ebin> <path2/ebin>
    

    这将启动 erlang shell。接下来你需要做的是:- 做

    &gt; cd("&lt;path to your module.erl file&gt;").

    编译你的模块

    &gt; c(your module).

    您的 module.beam 文件将作为编译的结果生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 2013-02-18
      • 2016-05-29
      • 2015-02-21
      • 2013-08-14
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多