pkg-config 找不到 gtk+-3.0

Posted

技术标签:

【中文标题】pkg-config 找不到 gtk+-3.0【英文标题】:pkg-config cannot find gtk+-3.0 【发布时间】:2018-10-06 10:48:36 【问题描述】:

我正在尝试使用 libui-node 来构建 Node.js 项目。

$ yarn add libui-node

这给出了一个错误:

node-gyp configure build Package gtk+-3.0 在 pkg-config 搜索路径。 也许你应该添加目录 包含 `gtk+-3.0.pc' 到 PKG_CONFIG_PATH 环境变量 找不到包 'gtk+-3.0' gyp:调用 'pkg-config gtk+-3.0 --cflags-only-I | sed s/-I//g' 在 binding.gyp 中返回退出状态 0。在尝试加载 binding.gyp gyp ERR 时!配置错误 ...

然后我按照说明进行操作:

$ pkg-config gtk+-3.0 --cflags-only-I | sed s/-I//g 

包 gtk+-3.0 是 在 pkg-config 搜索路径中找不到。也许你应该添加 包含 `gtk+-3.0.pc' 的目录到 PKG_CONFIG_PATH 环境 变量没有找到包'gtk+-3.0'

不过,我已经用这个命令安装了 gtk+-3.0:

$  sudo apt-get install build-essential libgtk-3-dev

我在 Ubuntu 17.10 上。

我的PKG_CONFIG_PATH

$ echo $PKG_CONFIG_PATH

/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:

我应该如何配置我的系统以便它可以找到这个库?

【问题讨论】:

这能回答你的问题吗? pkg-config cannot find .pc files although they are in the path 【参考方案1】:

编辑:

如@BrettHale 在this SO answer 中所述,使用pkg-config --variable pc_path pkg-config 更容易显示pkg-config 查找.pc 文件的默认位置。这使用一个特殊的虚拟pkg-config 包来公开pkg-config 配置。这比解析调试日志或使用strace(它不止一次地拯救了我的一天)更容易,但更重要的是教我们如何在不知道去哪里查找信息时获取信息。

原答案:

您不必设置PKG_CONFIG_PATH。通常,您的发行版使用的路径与 pkg-config 将默认查找的路径相匹配。

pkg-config 查找与 GTK+ 3 关联的 .pc。当您安装了 libgtk-3-dev 开发包时,您会在其中找到它提供的 .pc 文件,使用:

$ dpkg -L libgtk-3-dev | grep '\.pc'
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-unix-print-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-wayland-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gdk-x11-3.0.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-x11-3.0.pc

这些结果适用于我的 Ubuntu 14.04 系统,但在 Ubuntu 17.10 for amd64 上,文件没有移动,它仍然是:

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

现在文件名为gtk+-3.0.pc,因此pkg-config 所期望的模块名称是没有.pc 扩展名的名称,即gtk+-3.0。这有助于确保您没有在模块名称中打错字。

例如,

pkg-config --modversion gtk+3.0

会告诉你它找不到gtk+3.0,你应该更改PKG_CONFIG_PATH,但实际上真正的问题是模块名称错误,因为缺少- 字符。

现在,我们将在默认配置下运行pkg-config,而不是自定义PKG_CONFIG_PATH。这将检查您系统的默认行为,pkg-config 仅查看其默认路径:

unset PKG_CONFIG_PATH
pkg-config --modversion gtk+-3.0

如果这会返回 GTK+ 的版本,那么您就完成了。如果您仍然有错误消息说它没有找到,那么您可以检查pkg-config 默认在调试日志中的位置。只需添加--debug 选项:

pkg-config --debug --modversion gtk+-3.0

这会返回一个非常详细的日志,说明它检测到 .pc 文件的位置。 这是 Ubuntu 14.04 系统的前几行:

Option --debug seen
Option --modversion seen
Error printing enabled by default due to use of --version, --libs, --cflags, --libs-only-l, --libs-only-L, --libs-only-other, --cflags-only-I, --cflags-only-other or --list. Value of --silence-errors: 0
Error printing enabled
Adding virtual 'pkg-config' package to list of known packages
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
[...]

注意以Cannot open directoryScanning directory 开头的行。他们告诉你pkg-config 在哪里找。让我们只显示:

$ pkg-config --debug --modversion gtk+-3.0 2>&1 | egrep "(Cannot open|Scanning) directory"
Cannot open directory '/usr/local/lib/x86_64-linux-gnu/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/lib/pkgconfig' in package search path: No such file or directory
Cannot open directory '/usr/local/share/pkgconfig' in package search path: No such file or directory
Scanning directory '/usr/lib/x86_64-linux-gnu/pkgconfig'
Scanning directory '/usr/lib/pkgconfig'
Scanning directory '/usr/share/pkgconfig'

现在您拥有了所有要搜索的位置。这些在我的 14.04 和 Ubuntu 17.04 中是相同的(我在 docker 容器中检查过)。其中一些目录存在,其他目录不存在。你会注意到/usr/lib/x86_64-linux-gnu/pkgconfig 是我的,所以/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc 被找到了。

如果它不适合你,那么是的,你可以将它添加到PKG_CONFIG_PATH

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig

现在应该返回pkg-config 检测到的 GTK+ 库的版本:

pkg-config --modversion gtk+-3.0

【讨论】:

我在 docker 容器中尝试过,docker run -it ubuntu:17.04,然后是apt-get update && apt-get install pkg-config libget-3-dev。而且它是开箱即用的,所以我不知道你的环境是什么。【参考方案2】:

这是由于 .bbappend 文件从路径下的 gtk+3 中删除了 x11

cat meta-freescale/recipes-graphics/gtk+/gtk+3_%.bbappend

PACKAGECONFIG_remove_imxgpu2d = " \
$@bb.utils.contains("DISTRO_FEATURES", "wayland", "x11", "", d) \
"

CFLAGS_append_imxgpu2d = " \
-DLINUX \
$@bb.utils.contains('DISTRO_FEATURES', 'wayland', '-DEGL_API_FB
-DEGL_API_WL', '', d) \

而不是 remove 添加 append 它将成功构建。

【讨论】:

以上是关于pkg-config 找不到 gtk+-3.0的主要内容,如果未能解决你的问题,请参考以下文章

[linux][c/c++]代码片段02

Ubuntu16.04 - 安装gtk+-3.0和appindicator3-0.1

GTKmm 的 CMake 错误 - 找不到包 'gtkmm-3.0'

Mac上配置GTK环境

pkg-config 找不到 opencv

undefined reference to `gdk_monitor_get_scale_factor/gtk_widget_get_scale_factor‘