pkg-config 命令介绍

本文详细介绍了如何使用pkg-config工具来检测依赖环境,并展示了系统库与非系统库在搜索路径和链接方法上的区别。
部署运行你感兴趣的模型镜像

configure脚本在检查相应依赖环境时,通常会通过pkg-config的工具来检测相应依赖环境。

pkg-config 命令
$pkg-config –list-all
$pkg-config --cflags
$pkg-config --libs

$pkg-config --modversion

环境变量: PKG_CONFIG_PATH
环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的,pkg-config --list-all也会沿此路径搜索.

我设定了自己的PKG_CONFIG_PATH, 如下:

$ echo $PKG_CONFIG_PATH
/opt/ffmpeg_build/lib/pkgconfig:/opt/Qt5.14.0/5.14.0/gcc_64/lib/pkgconfig

附实例及跟踪解释
对于系统库(非lib开头),它们会搜索系统目录下的pkgconfig, 例如
$pkg-config --libs x264
它的输出是:
-lx264

其执行过程是从下面4个目录(系统目录)查找
openat(AT_FDCWD, "/usr/local/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
openat(AT_FDCWD, "/usr/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
openat(AT_FDCWD, "/usr/share/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3

这4个目录在我的机器上有如下信息:
4431  getdents64(3, /* 8 entries */, 32768) = 256
4431  getdents64(3, /* 166 entries */, 32768) = 5704
4431  getdents64(3, /* 5 entries */, 32768) = 160
4431  getdents64(3, /* 45 entries */, 32768) = 1656
一个入口(项)占32个字节的意思吧.
它能够从中找到x264.pc的位置,进而确定其库的链接方法
4431  openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/pkgconfig/x264.pc", O_RDONLY) = 3
4431  write(1, "-lx264\n", 7)           = 7
以上信息用strace 得到.

对于非系统库,例如libavutil
$pkg-config --libs libavutil
它的输出是:
-L/opt/ffmpeg_build/lib -lavutil

它会优先从$PKG_CONFIG_PATH 中找,然后是系统级目录.
我机器上的PKG_CONFIG_PATH 在 .bashrc 中是如下定义的:
export PKG_CONFIG_PATH=/opt/ffmpeg_build/lib/pkgconfig:/opt/Qt5.14.0/5.14.0/gcc_64/lib/pkgconfig

strace 跟踪到如下信息:
openat(AT_FDCWD, "/opt/ffmpeg_build/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
getdents64(3, /* 10 entries */, 32768) = 360
openat(AT_FDCWD, "/opt/Qt5.14.0/5.14.0/gcc_64/lib/pkgconfig", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
getdents64(3, /* 60 entries */, 32768) = 2304
..... 这里是系统库查找过程,忽略之

在如下位置找到了libavutil.pc, 并确定了其库的使用方法
openat(AT_FDCWD, "/opt/ffmpeg_build/lib/pkgconfig/libavutil.pc", O_RDONLY) = 3
write(1, "-L/opt/ffmpeg_build/lib -lavutil"..., 33) = 33

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值