ejabberd 模块编译错误

Posted

技术标签:

【中文标题】ejabberd 模块编译错误【英文标题】:ejabberd module compilation error 【发布时间】:2016-05-29 09:23:30 【问题描述】:

我是 ejabberd 的新手,正在尝试在 Windows 服务器上为 offline_message_posturl 添加新模块。除了以下内容,我找不到任何专门针对 Windows 的博客文章。我正在使用 ejabberd 15.07 版。

我一直在关注这篇博文: http://jasonrowe.com/2011/12/30/ejabberd-offline-messages/

现在我无法从模块文件创建.beam 文件。我收到此错误:

> c(mod_http_offline).     
mod_http_offline.erl:21: undefined macro 'INFO_MSG/2'     
mod_http_offline.erl:27: undefined macro 'INFO_MSG/2' 
mod_http_offline.erl:44: undefined macro 'INFO_MSG/2'   
mod_http_offline.erl:11: function start/2 undefined  
mod_http_offline.erl:11: function stop/1 undefined  
mod_http_offline.erl:38: function post_offline_message/3 undefined  
error

我该如何解决这个错误?

【问题讨论】:

【参考方案1】:

INFO_MSG 宏以前定义在头文件 ejabberd.hrl 中,但在 ejabberd 13.06 中被移至 logger.hrl,该宏在写完博客文章后发布。包括logger.hrlejabberd.hrl,你的文件应该可以编译:

-include("ejabberd.hrl").
-include("logger.hrl").

【讨论】:

您好,感谢您的帮助。我能够构建 .beam 文件。并复制到“ebin”文件夹。并在 ejabberd.yml 文件的模块部分下添加了“mod_http_offline:[]”并重新启动我仍然收到错误。根据博客假设添加 我在重启 ejabberd 服务器时仍然遇到错误。在博客中说模块必须添加到 cfg 文件中,但据我所知,新版本的配置必须在 .yml 文件中,没有 【参考方案2】:

您没有指向 ejabberd 包含 .hrl 文件。最简单的方法可能是将您的模块添加到 ejabberd src 目录并重新编译所有内容。

否则,您可以使用 erlc 编译模块,使用 -I 指向 ejabberd 包含目录(根据需要使用尽可能多的 -I 指令)。例如:

erlc -I ../ejabberd/include mod_http_offline.erl

【讨论】:

以上是关于ejabberd 模块编译错误的主要内容,如果未能解决你的问题,请参考以下文章

ejabberd 'make' 通过“无法运行已编译的 C 程序”

如何在 Eclipse 中编译 ejabberd 钩子

Erlang Module Hook 上的 ejabberd 2.1.11 错误 [关闭]

Ejabberd 错误:发送 Jingle“会话启动”节时找不到模块

带有 lager_transform 未定义的 ejabberd 和 Erlang 安装

我的MAC编译LUA-CJSON模块时报如下错误,求大神解答~~!