Linux pkg-config介绍
10/21
本文最后更新于
2023年10月21日,已超过
531天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
今天安装一个软件时,执行配置命令configure
报错,发现是没有找到依赖的库信息,而其寻找依赖库信息是通过pkg-config
工具实现的,那么pkg-config
是什么?
简介
pkg-config实际上是一个向用户提供相应库的路径、版本号、头文件、链接库等信息的工具。
许多大型软件项目构建时需要指定依赖的第三方库的头文件和库文件位置,如果头文件和库文件数量比较多,手动写很麻烦,pkg-config工具可以减轻工作量,而且不用指定实际路径,灵活配置,比如
gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main
# --cflags 指定头文件
# --libs 指定库文件
上面命令中pkg-config作用就是将gtk头文件路径和库文件列出来。不用手动添加-I、-L参数路径了。
pkg-config -h
pkg-config --list-all #列出已知的pkg-config管理的库
pkg-config --libs zlib #查看zlib库链接信息
那么pkg-config信息来自哪里?
pc文件
实际上它通过查询.pc
文件获得对应库的信息。
如何查找
pkg-config去哪里查找.pc文件?
- 系统目录
/usr/lib/pkgconfig
下所有*.pc文件 PKG_CONFIG_PATH
环境变量指向的路径下所有.pc文件(可用于指定普通用户路径下的pc文件)
pc文件内容
从系统中找到一个zlib库的pc文件,所在路径为/usr/lib64/pkgconfig/zlib.pc
,内容如下:
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib64
sharedlibdir=${libdir}
includedir=/usr/include
Name: zlib
Description: zlib compression library
Version: 1.2.7
Requires:
Libs: -L${libdir} -L${sharedlibdir} -lz
Cflags: -I${includedir}
可以看到定义了Libs
和Cflags
信息,pkg-config获取这些信息用于其它软件的构建。
与Makefile协作
pkg-config与Makefile搭配使用范例:
STDLIB_CFLAGS := $(shell pkg-config --cflags fortran_stdlib)
STDLIB_LIBS := $(shell pkg-config --libs fortran_stdlib)

