我正在尝试从源包编译rrdtool。我不使用 RPM 软件包,所以不要要求我安装软件包;)
我在rrdtool之前编译了所有需要的软件http://oss.oetiker.ch/rrdtool/doc/rrdbuild.en.html
rrdtool的./configure就可以了。
但是当我做时我收到以下错误:
CC rrdcached-rrd_daemon.o
rrd_daemon.c:108:27: erreur: glib-2.0/glib.h : Aucun fichier ou dossier de ce type
rrd_daemon.c:246: erreur: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
rrd_daemon.c: In function âadd_response_infoâ:
rrd_daemon.c:540: attention : implicit declaration of function âva_startâ
rrd_daemon.c:540: attention : nested extern declaration of âva_startâ
rrd_daemon.c:546: attention : implicit declaration of function âva_endâ
rrd_daemon.c:546: attention : nested extern declaration of âva_endâ
[...]
glib-2.0/glib.h 存在于我的系统中,位于 /usr/local/glib-2.34.0/glib/glib.h
我设置了包含 glib 路径的环境变量 PKG_CONFIG_PATH 。 /usr/local/glib-2.34.0/lib/pkgconfig/
我看到了一些关于它的主题,但对我的情况没有任何帮助。
查看 config.log 一切似乎都正常!
答案1
”行政文件或CE类型档案" == "没有这样的文件或目录"
PKG_CONFIG_PATH
包含要添加的(非默认)路径,以便查找额外的.pc
文件,而不是包本身。如果该目录中有正确的.pc
文件,它应该可以工作。
检查以下输出:
pkg-config --cflags --libs glib-2.0
(有和没有设置PKG_CONFIG_PATH
)
它应该显示您的glib-2.0包含和库的安装路径,这是我的,安装到/usr/local/
:
-I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include \
-L/usr/local/lib -lglib-2.0
如果错误则检查.pc
文件。
然而,您给出的路径glib.h
看起来更像是解压的源代码,而不是完整的安装glib-2.0。您已经安装并构建了 glib-2.0 吗?如果您按照说明 URL 构建它,那么它似乎不正确,您需要重复该步骤。
没有理由不对其中一些软件包进行正常的配置/制作/安装/usr/local
,尤其是glib-2.0,兹库,库文件,libXML2-- 除非它们与您已经安装的东西冲突。
RRDtool 构建文档背后的逻辑是构建/tmp
并安装所有内容,/opt
以使其尽可能独立。虽然它可能是一种相当健壮的方法,但它也有一些缺点(包括需要设置各种神奇的环境变量)。
更新:问题是 glib-2.0 的安装路径与 rrdtool 中使用的包含冲突。当您将其安装到
/usr/local/glib-2.34.0/
构建.pc
时指定/usr/local/glib-2.34.0/include/glib-2.0
.这条路已经包含子目录 glib-2.0
因此,当 rrdtool 尝试包含<glib-2.0/glib.h>
它时,它会失败。我相信这是一个 rrdtool 问题,当 glib-2.0 安装到/usr
或下的“预期”位置时/usr/local
(大概当您完全使用构建指南路径时),它会被掩盖。
如果您安装到/usr/local
,包含路径/usr/local/include
将导致“ #include <glib-2.0/glib.h>
”正常工作。
作为修复,我建议构建并安装所有依赖项/usr/local
(然后您只需要设置PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
)或者严格遵循rrdtool构建说明,或者您可以CFLAGS
在运行之前设置为安装 glib-2.0 的位置configure
,例如:
export CFLAGS="-I/usr/local/glib-2.34.0/include"
(即 报告的上一级目录pkg-config --cflags glib-2.0
)
如果编译中断,您可以通过运行以下命令更好地了解发生的情况:
make AM_DEFAULT_VERBOSITY=1
发生错误后,这次将重试并打印所使用的命令,以便您可以检查gcc -I
标志。
好的,找到了错误报告,它是固定的(尽管标题“修复使用非标准 glib 位置的构建“有点误导)。但从那以后就没有新的稳定版本了。FWIW,用户列表上有几个未回答的问题似乎是同样的问题。