pkg-config 找不到 gtk+-3.0

pkg-config cannot find gtk+-3.0

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

$ yarn add libui-node

这给出了一个错误:

node-gyp configure build Package gtk+-3.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gtk+-3.0.pc' to the PKG_CONFIG_PATH environment variable No package 'gtk+-3.0' found gyp: Call to 'pkg-config gtk+-3.0 --cflags-only-I | sed s/-I//g' returned exit status 0 while in binding.gyp. while trying to load binding.gyp gyp ERR! configure error ...

然后我按照说明操作:

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

Package gtk+-3.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gtk+-3.0.pc' to the PKG_CONFIG_PATH environment variable No package 'gtk+-3.0' found

但是,我已经用这个命令安装了 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:

我应该如何配置我的系统才能找到这个库?

编辑:

Showing the default locations where pkg-config looks for .pc files is more easily done with pkg-config --variable pc_path pkg-config as stated by @BrettHale in this SO answer. This uses a special virtual pkg-config package to expose pkg-config configuration. This is easier than parsing the debug logs or using strace (which saved my day more than once), but the point was more on teaching how to get information when we don't know where to look.

原回答:

您不必设置 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

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

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

这 return 是一个非常详细的日志,记录了它在何处检测到 .pc 文件。 这里是 may 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

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

pkg-config --modversion gtk+-3.0

这是由于 .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 它将成功构建。