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 directory
和Scanning 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的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu16.04 - 安装gtk+-3.0和appindicator3-0.1
GTKmm 的 CMake 错误 - 找不到包 'gtkmm-3.0'
undefined reference to `gdk_monitor_get_scale_factor/gtk_widget_get_scale_factor‘