我的介子构建失败了:
Called: `/usr/bin/pkg-config --modversion gobject-introspection-1.0` -> 1
stderr:
Package dependency requirement 'glib-2.0 >= 2.80.0' could not be satisfied.
Package 'glib-2.0' has version '2.72.0', required version is '>= 2.80.0'
Package dependency requirement 'gobject-2.0 >= 2.80.0' could not be satisfied.
Package 'gobject-2.0' has version '2.72.0', required version is '>= 2.80.0'
据我了解,这是因为
/usr/lib/x86_64-linux-gnu/pkgconfig/gobject-introspection-1.0.pc
包含:
Name: gobject-introspection
Description: GObject Introspection
Version: 1.80.1
Requires: glib-2.0 >= 2.80.0, gobject-2.0 >= 2.80.0
如果我检查我安装的内容:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-================================-==============-============-===========================================================
un gir1.2-gobject-2.0 <none> <none> (no description available)
un gir1.2-gobject-2.0-dev <none> <none> (no description available)
ii gobject-introspection:amd64 1.80.1-1 amd64 Generate interface introspection data for GObject libraries
ii gobject-introspection-bin 1.80.1-1 amd64 Executables for gobject-introspection
un gobject-introspection-bin-linux <none> <none> (no description available)
un gobject-introspection-repository <none> <none> (no description available)
ii libcairo-gobject2:amd64 1.18.0-3build1 amd64 Cairo 2D vector graphics library (GObject library)
un libgobject-2.0-0 <none> <none> (no description available)
...我的系统上没有安装
libgobject-2.0
软件包,但如果我尝试安装它:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'libglib2.0-0t64' instead of 'libgobject-2.0-0'
libglib2.0-0t64 is already the newest version (2.80.0-6ubuntu3.1).
还有
/usr/lib/x86_64-linux-gnu/pkgconfig/gobject-2.0.pc
说:
Name: GObject
Description: GLib Type, Object, Parameter and Signal Library
Version: 2.80.0
Requires: glib-2.0
Requires.private: libffi >= 3.0.0
Libs: -L${libdir} -lgobject-2.0
Cflags: -I${includedir}
那么 pkg-config 会根据什么来确定
2.72
版本?因为 ind /usr -name *.pc -exec grep -l -F '2.72' {} +
没有找到任何东西,而 find /usr -name *.pc -exec grep -l -F '2.80' {} +
却找到了一些...
更一般地说,我该如何解决这个问题?
系统是新安装的(K)Ubuntu-24.04,在
apt-update
+apt-upgrade
后重新启动。
我已经看到了这个问题,但我已经有了开发包。我也看过这个但是没有
requirements.txt
。
那么
是通过什么来确定 2.72 版本的呢?pkg-config
我们无法具体说明,因为这取决于您的机器和个人环境,但您可以让
pkg-config
告诉您。 例如,
pkg-config --path glib-2.0
除了几个标准目录之外,
pkg-config
还将查阅环境变量PKG_CONFIG_PATH
中指定的任何目录,以及在命令行上指定的任何其他目录。 命令行参数可能会以多种方式在您不知情的情况下潜入,但如果您从非标准源获取配置,那么我的第一个猜测是它是在 PKG_CONFIG_PATH
中命名的。
我该如何解决这个问题?
这取决于恶意 PC 目录的配置位置,但如果它确实来自
PKG_CONFIG_PATH
,那么最好的修复方法可能是对 shell 配置脚本进行适当修改,或者删除为该变量设置不适当的自定义值的行,或者添加行来覆盖来自其他地方的不适当的值。