编辑:
如@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 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