Ejabberd 安装 - 致命错误:erl_driver.h:没有这样的文件或目录

Posted

技术标签:

【中文标题】Ejabberd 安装 - 致命错误:erl_driver.h:没有这样的文件或目录【英文标题】:Ejabberd Installation - fatal error: erl_driver.h: No such file or directory 【发布时间】:2015-02-15 14:28:55 【问题描述】:

我在 AWS 上的普通实例 unix 实例上安装了 erlang。 现在我正在尝试安装 ejabberd,但是我被困在这个特定的步骤。

我使用的安装步骤是:

sudo ./configure --with-erlang=/home/ec2-user/otp_src_17.4
sudo make
sudo make install

但是,当我进入“sudo make”时,我收到以下错误:

/home/ec2-user/otp_src_17.4/bin/escript rebar compile && :> deps/.built
==> p1_utils (compile)
==> p1_cache_tab (compile)
==> p1_tls (compile)
Compiling /home/ec2-user/ejabberd-14.12/deps/p1_tls/c_src/p1_tls_drv.c
/home/ec2-user/ejabberd-14.12/deps/p1_tls/c_src/p1_tls_drv.c:23:24: fatal error: erl_driver.h: No such file or directory
 #include <erl_driver.h>
                        ^
compilation terminated.
ERROR: compile failed while processing /home/ec2-user/ejabberd-14.12/deps/p1_tls: rebar_abort
make: *** [deps/.built] Error 1

不确定为什么会发生此错误。肯定安装了 Erlang,因为我可以从控制台检查它的版本。

我怀疑可能存在一些配置问题?

【问题讨论】:

【参考方案1】:

从 ejabberd 源代码来看,--with-erlang 选项处理无法确保正确编译 Erlang 驱动程序和 NIF 所需的 C 头文件包含在指定目录中。我认为这是一个 ejabberd 构建系统错误。

您需要告诉配置并执行步骤来找到 Erlang,以确保 C 编译器在您的 Erlang 安装中搜索头文件。通常,您可以通过将CFLAGS 明确指定为configure 步骤的一部分来执行此操作,但在这种情况下这不起作用,因为该变量不会进入rebar 构建。在这种情况下应该工作的另一种方法是确保在 PATH 中找到您的 Erlang 安装:

export PATH=/home/ec2-user/otp_src_17.4/bin:$PATH
./configure --with-erlang=/home/ec2-user/otp_src_17.4
make
sudo make install

ejabberd 构建系统在 PATH 中查找 erlerlc,然后使用找到它们的根目录来查找构建所需的包含文件和库。

另外,请注意,您可能不需要将sudo 用于configuremake 步骤,而只需用于make install 步骤。

【讨论】:

感谢您的回复。但是,这不起作用。我怀疑如果配置正确,我将不需要带有 ./configure 命令的“--with-erlang=/home/ec2-user/otp_src_17.4”。 erl 命令可以在我的控制台上运行,但我只是不明白为什么 Ejabberd 在配置过程中找不到它 您可能会尝试的另一件事是设置CPATH 环境变量,如下所示:export CPATH=/home/ec2-user/otp_src_17.4/usr/include。这使得 gcc 将该路径视为在编译命令行上使用 -I 指定的。 再次感谢,但它仍然对我不起作用。但至少现在我可以在没有“--with-erlang”的情况下进行配置。然而,同样的错误仍然存​​在于“make”步骤 你能确定erl_driver.h 文件存在于我指定的/home/ec2-user/otp_src_17.4/usr/include 目录中吗?如果没有,请运行find /home/ec2-user/otp_src_17.4 -name erl_driver.h 并使用找到它的目录设置CPATH 而不是/home/ec2-user/otp_src_17.4/usr/include 是的,它肯定存在。我使用了“find -name erl_driver.h”,它给了我 3 个结果。感谢你目前的帮助。我继续在 ubuntu 上安装 ejabberd 而不是默认的 aws fedora 实例,现在它工作得很好。只是想知道您是否可以推荐一个关于如何使用 java smack 库(对于像克隆这样的 whatsapp)的 android 应用程序实现 ejabberd 的教程

以上是关于Ejabberd 安装 - 致命错误:erl_driver.h:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mac 上安装 ejabberd

Ejabberd 配置:错误:找不到 libyaml 库

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

cad 2014安装后打开出现致命错误;unhandled access violation writing...

打开CAD出现致命错误:安全系统(保密锁或网络许可)不起作用或未正确安装

cad2018卸载不干净,安装打开后出现致命错误怎么办?