我尝试安装 udev。 udev 在
./configure
期间给了我一个错误
--exists: command not found configure: error:
pkg-config and "glib-2.0 >= 2.16" not found, please set GLIB_CFLAGS and GLIB_LIBS
to the correct values or pass --with-internal-glib to configure
好吧,pkg-config 和 glib-2.0 丢失了。
首先我尝试安装pkg-config。我收到这条消息:
checking whether to list both direct and indirect dependencies... no
checking for Win32... no
checking if internal glib should be used... no
checking for pkg-config... no
./configure: line 13557: --exists: command not found
configure: error: pkg-config and "glib-2.0 >= 2.16" not found,
please set GLIB_CFLAGS and GLIB_LIBS to the correct values or
pass --with-internal-glib to configure
好吧,我的理解是,缺少了那个油嘴滑舌的东西。
下一步安装 Glib。
我收到了这条消息:
configure: error: in `/root/glib-2.33.3':
configure: error: The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
Alternatively, you may set the environment variables LIBFFI_CFLAGS
and LIBFFI_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
但我现在很困惑。 他们需要彼此吗? 我的错误是什么?
正如您已经观察到的,pkg-config 和 glib 之间确实存在循环依赖关系。为了破解它,pkg-config 的源代码包含一个 glib 版本,这足以编译它。这应该会打破依赖循环。
尝试使用
--with-internal-glib
配置 pkg-config。
glib 错误消息告诉我们:
或者,您可以设置环境变量 LIBFFI_CFLAGS 和 LIBFFI_LIBS 以避免调用 pkg-config。 有关更多详细信息,请参阅 pkg-config 手册页。
Glib 构建脚本使用 pkg-config 来查找 libffi。但是您也可以通过设置环境变量手动提供信息。那么就不需要调用 pkg-config 了。 Glib 本身根本不需要 pkg-config。
pkg-config 人员提供了另一个解决方案。同样,在错误消息的末尾:
请将 GLIB_CFLAGS 和 GLIB_LIBS 设置为正确的值 或 通过 --with-internal-glib 进行配置
在这种情况下,pkg-config 本身打包了构建所需的所有内容,而无需在系统上安装 Glib。
export GLIB_CFLAGS="$(pkg-config --cflags glib-2.0)"
export GLIB_LIBS="$(pkg-config --libs glib-2.0)"
printf '# In the case of a RHEL6.5\n\tGLIB_CFLAGS=%s\n\tGLIB_LIBS=%s\n' "$GLIB_CFLAGS" "$GLIB_LIBS"
# In the case of a RHEL6.5
GLIB_CFLAGS=-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
GLIB_LIBS=-lglib-2.0
# _now_ it is a no-brainer.
libudev 现在是 systemd 的一部分,并且它不依赖于 glib。
大多数 Linux 发行版都提供 pkg-config、libudev 和 glib 的二进制文件。 它们可能已经安装,但如果没有,您可以使用包管理器来获取它们。
如果您确实需要自己编译这些东西,请考虑使用 pkgconf,它是不使用 glib 的 pkg-config 的轻量级实现。