pkg-config 找不到 gtk+-3.0

12

我正在尝试使用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 

在 pkg-config 的搜索路径中未找到 gtk+-3.0 包,可能需要将包含 `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无法找到.pc文件,尽管它们在路径中 - liberforce
2个回答

14

编辑:

如@BrettHale在这个SO答案中所述,更容易地显示pkg-config查找.pc文件的默认位置是使用pkg-config --variable pc_path pkg-config。这使用一个特殊的虚拟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,因此模块的名称应该是没有.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+的版本号,那么你就完成了。但是,如果你仍然收到说找不到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。它可以直接使用,所以我不知道你的环境有什么特殊之处。 - liberforce

-1
由于.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,这样编译将会成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接