pkg-config的学习之路

pkg-config是编译时的辅助工具,用于插入正确的编译器选项。它通过读取xxx.pc文件获取信息,如glibc-2.29.pc。默认在/usr/lib/pkgconfig/查找pc文件,也可通过PKG_CONFIG_PATH环境变量指定路径。pc文件包含Name、Description、Version、Cflags、Libs等信息,用于指示库的路径、版本和编译链接选项。PKG_CHECK_MODULES宏在configure.ac中用于检查模块存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

pkg-config是编译应用程序和库时使用的辅助工具。它可以帮助我们在命令行中插入正确的编译器选项,以便应用程序可以使用诸如gcc -o test test.c `pkg-config --libs --cflags glibc-2.29`的命令,其中–cflags和–libs分别指定CFLAGS参数和库文件。这样我们就不必通过硬编码来找到glib(或其他库)。它与语言无关,因此可用于定义文档的位置。

详解

那么pc-config是从哪儿知道这些信息的呢?它是从名为xxx.pc这个文件中查找到的。上面的例子中,它是从glibc-2.29.pc文件中查知的。

那pkg-config 又怎么会知道opencv.pc这个文件呢?

  • 默认情况下,pkg-config首先在prefix/lib/pkgconfig/中查找相关包对应的相应的文件。在linux上上述路径名为 /usr/lib/pkgconfig/。
  • 若是没有找到,它也会到PKG_CONFIG_PATH这个环境变量所指定的路径下去找。若是没有找到,它就会报错。

设置环境变量PKG_CONFIG_PATH的方法为:

export PKG_CONFIG_PATH=/your/pathname:$PKG_CONFIG_PATH

如果想要让该环境变量永久生效,可以在/etc/profile文件中添加上面的语句,然后执行source /etc/profile让其立即生效。

编写pc文件

这里通过一个示例讲解一下如何编写pc文件。pc文件只需5个内容:Name、Description、Version、Cflags、Libs。当然,为了书写方便,我们一般还会加入一些变量。

在/usr/lib/pkgconfig中添加文件glibc-2.29.pc,并加入以下内容:

prefix=/usr/local/glibc-2.29
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${exec_prefix}/include

Name: GLibc
Description: C Utility Library
Version: 2.29
Libs: -L${libdir} -lm 
Cflags: -I${includedir}
  • prefix一般是指定库的默认安装路径
  • exec_prefix一般是指库的另外指定的安装路径
  • inludedir指定库的头文件路径
  • libdir指定库的lib文件的路径
  • Name指定库的名称
  • Description表示库的描述
  • Version是版本号
  • Cflags是gcc链接头文件的指令
  • Libs是gcc链接lib文件的指令

在命令行中运行pkg-config --libs --cflags glibc-2.29,我们会得到

-I/usr/local/glibc-2.29/include -L/usr/local/glibc-2.29/lib -lm

可见,pkg-config只是对gcc的一些参数进行封装而已

补充知识

这里介绍一个相关的宏,PKG_CHECK_MODULES。我们可以在configure.ac中使用宏PKG_CHECK_MODULES进行检查模块是否存在。典型用法是:

PKG_CHECK_MODULES([MYSTUFF],[gtk + -2.0> = 1.3.5 libxml = 1.8.4])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值