一、引言

最近在学习《C 程序设计新思维》(第 2 版),其中作者在开篇介绍了 pkg-config 这个工具,并使用它来获取到所需库的库文件路径和头文件路径信息。比如获取 GSL 库的库文件路径和头文件信息的两条命令:

$ pkg-config --libs gsl
$ pkg-config --cflags gsl

然而,这在我的 Manjaro 上面输出了如下的信息:

Package gsl was not found in the pkg-config search path.
Perhaps you should add the directory containing `gsl.pc'
to the PKG_CONFIG_PATH environment variable
Package 'gsl', required by 'virtual:world', not found

看样子,应该是需要将 gsl.pc 文件的路径配置到 PKG_CONFIG_PATH 中去。

二、解决

于是乎这个问题变得非常好解决了。

首先,我们 find 命令寻找下环境中所有的 *.pc 文件,将其目录都记录下来:

$ sudo find / -name "*.pc"

然后,打开 .zshrc(我使用的是 zsh,你或许使用的是 bash,那就是 .bashrc),配置 PKG_CONFIG_PATH 环境变量,以便我们后续使用:

# pkg-config path
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib32/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig

最后,适用该配置文件即可:

$ source .zshrc

现在,pkg-config 已经能够显示出来 gsl 的库文件和头文件信息了

$ pkg-config --libs gsl
-L/usr/local/lib -lgsl -lgslcblas -lm

三、注意

或许在上一步中你会注意到,当你 find 查询系统中所有的 *.pc 文件时,你会发现,所有的 *.pc 文件都在 pkgconfig 文件夹下,也就是说,pkg-config 的搜索来源,就是这些个 pkgconfig 文件夹下的 *.pc 文件。

所以说,使用 pkg-config 进行查询的关键词,一定要是 *.pc 文件的去掉后缀名的全称,多一个字母或者少一个字母都不行!!!

比如说,这里在我的 Manjaro 环境的 /usr/lib 目录下有这么一个库的 *.pc 文件:

libnl-3.0.pc

那么我只能使用下面这行命令进行查询:

$ pkg-config --libs libnl-3.0

而不能使用下面这行命令:

$ pkg-config --libs libnl

总的来说就是,pkg-config 是不支持模糊查询的,必须与 *.pc 文件一一对应,否则就会报错。

希望本篇博客能够给你带来一些帮助:)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐