我正在尝试从源代码包编译rrdtool。我不使用RPM软件包,所以不要要求我安装软件包;)
根据http://oss.oetiker.ch/rrdtool/doc/rrdbuild.en.html,我在rrdtool之前编译了所有所需的软件。
./配置rrdtool是可以的。
但是,当我做了,我得到了以下错误:
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中。
我设置了env变量PKG_CONFIG_PATH,它包含glib的路径。/usr/local/glib-2.34.0/lib/pkgconfig/
我看到了一些关于这件事的话题,但对我的案子没有什么可谈的。
看看config.log,一切似乎都很好!
发布于 2013-03-14 12:31:02
“==”没有这样的文件或目录“
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、zlib、libpng、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构建说明进行设置,或者在运行configure之前将CFLAGS设置为安装glib-2.0的位置,例如:
export CFLAGS="-I/usr/local/glib-2.34.0/include"(即pkg-config --cflags glib-2.0报告的一个目录)
如果通过运行编译中断,您可以更好地了解正在发生的事情:
make AM_DEFAULT_VERBOSITY=1在错误发生后,使用的命令将被重试并打印,因此您可以检查gcc -I标志。
好的,找到了一个错误报告,它是固定的(虽然标题“位置”有点误导)。不过,从那以后就没有新的稳定版本了。FWIW,在用户列表中有几个未回答的问题似乎也是同样的问题。
https://unix.stackexchange.com/questions/67905
复制相似问题