TypechoJoeTheme

MetMan's Blog

网站页面

Linux pkg-config介绍

MetMan博 主
2023-10-21
/
0 评论
/
227 阅读
/
359 个字
/
百度已收录
10/21
本文最后更新于 2023年10月21日,已超过 334天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

今天安装一个软件时,执行配置命令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}

可以看到定义了LibsCflags信息,pkg-config获取这些信息用于其它软件的构建。

与Makefile协作

pkg-config与Makefile搭配使用范例:

STDLIB_CFLAGS := $(shell pkg-config --cflags fortran_stdlib)
STDLIB_LIBS := $(shell pkg-config --libs fortran_stdlib)
linux
朗读
赞(1)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/42/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码