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
中查找 erl
和 erlc
,然后使用找到它们的根目录来查找构建所需的包含文件和库。
另外,请注意,您可能不需要将sudo
用于configure
或make
步骤,而只需用于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:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
带有 lager_transform 未定义的 ejabberd 和 Erlang 安装
cad 2014安装后打开出现致命错误;unhandled access violation writing...