Linux pkg-config 使用方法

3次阅读

pkg-config 是 linux 上通过 .pc 文件自动获取库编译链接参数的工具;支持检查存在性、版本验证、提取头文件与库路径,并可配置 pkg_config_path 适配非标准安装路径。

Linux pkg-config 使用方法

pkg-config 是 Linux 上管理库依赖的核心工具,它不直接安装库,而是读取库自带的 .pc 文件,帮你自动拿到编译和链接所需的全部参数。用对了,不用再手动翻 /usr/include/usr/lib 找路径。

查库是否存在和版本

这是日常第一步,避免编译时报“找不到头文件”或“链接失败”:

  • pkg-config --exists glib-2.0:静默检查,返回 0 表示已安装(无输出);非 0 表示缺失
  • pkg-config --exists --print-errors gtk+-3.0:缺失时会明确提示缺哪个 .pc 文件,比如 ubuntu 下常需装 libgtk-3-dev
  • pkg-config --modversion openssl:直接打印已安装版本,如 3.0.13
  • pkg-config --atleast-version=2.68 libpng:脚本中常用,满足条件返回 0,可配合 &&if 判断

获取编译和链接参数

--cflags--libs 的输出喂给 gcc,是最典型用法:

  • pkg-config --cflags glib-2.0:输出类似 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
  • pkg-config --libs gtk+-3.0:输出类似 -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lcairo(自动包含依赖库)
  • 合起来用:gcc test.c $(pkg-config --cflags --libs glib-2.0) -o test(注意是 $(),不是单引号)
  • 只取头文件路径:pkg-config --cflags-only-I json-glib-1.0;只取库名:pkg-config --libs-only-l gobject-2.0

处理非标准安装路径

自己编译安装的库(如装到 /usr/local/opt/mylib),默认搜不到 .pc 文件:

  • 临时指定:PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config --libs mylib
  • 永久生效:在 ~/.bashrc 中加一行 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH,然后 source ~/.bashrc
  • 多个路径用冒号分隔,例如 /opt/foo/lib/pkgconfig:/usr/local/lib/pkgconfig

排查和调试技巧

遇到 Package xxx not found 不要急着重装,先确认几个关键点:

  • 运行 pkg-config --list-all | grep -i gtk 看名字是否拼写准确(如 gtk+-3.0 不是 gtk3
  • 检查 .pc 文件是否存在:find /usr -name "glib-2.0.pc" 2>/dev/NULL
  • 查看某个库的完整信息:pkg-config --debug --exists glib-2.0,会显示所有搜索路径和匹配过程
  • 查看库依赖关系:pkg-config --print-requires glib-2.0,了解它还依赖哪些其他库
text=ZqhQzanResources