本文主要介绍 Linux 操作系统中 pkg-config 工具的用法示例。

1 概述

pkgconfig 软件包的描述信息如下:

A tool for determining compilation options.

Manual 手册中对于 pkg-config 的介绍信息如下:

pkg-config - Return metainformation about installed libraries.

The pkg-config program is used to retrieve information about installed libraries in the system.  It is typically used to compile and link against one or more libraries.

pkg-config  retrieves  information  about  packages  from  special metadata files. These files are named after the package, and has a .pc extension. It will additionally look in the colon-separated list of directories specified by the PKG_CONFIG_PATH environment variable.

pkg-config 官网中的介绍信息如下:

pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the correct compiler options on the command line so an application can use gcc -o test test.c `pkg-config --libs --cflags glib-2.0` for instance, rather than hard-coding values on where to find glib (or other libraries). It is language-agnostic, so it can be used for defining the location of documentation tools, for instance.

总结上述介绍信息,可知:pkg-config 用于返回系统上已安装的库的相关信息,这些信息在编译和连接与该库相关的程序或库的过程中使用。

需要强调的是,pkg-config 用于程序或库的编译和连接过程,而非运行过程。

2 示例

下面通过一个示例,介绍 pkg-config 的使用场景及用法。

假设操作系统中安装了 x265 库,安装位置为 /usr/local,那么其对应的库文件为 /usr/local/lib/libx265.so,头文件为 /usr/local/include/x265.h,这些在编译和连接其他程序或库(如 ffmpeg)时所需的相关信息,都包含在 /usr/local/lib/pkgconfig/x265.pc 文件中。x265.pc 文件的内容如下:

[root@livestreamserver /usr/local]# cat /usr/local/lib/pkgconfig/x265.pc
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/includeName: x265
Description: H.265/HEVC video encoder
Version: 3.5
Libs: -L${libdir} -lx265
Libs.private: -lstdc++ -lm -lgcc_s -lgcc -lgcc_s -lgcc -lrt -ldl
Cflags: -I${includedir}
[root@livestreamserver /usr/local]#

接下来以构建启用 x265 编码功能的 ffmpeg 为例,介绍 pkg-config 的具体用法。

在构建 ffmpeg 时,首先需要通过 ./configure --enable-gpl --enable-libx265 命令创建构建选项。由于指定了要使用 x265 库,所以该命令运行过程中会通过 pkg-config 寻找 x265 库的相关信息。

在不进行任何 pkg-config 配置的情况下,上面的 configure 命令会报错,提示在使用 pkg-config 找不到 x265 的相关信息,错误信息如下图所示:

出现上图所示错误,是由于 pkg-config 没有找到 x265.pc 文件,获取不到编译 ffmpeg 所需的 x265 库的相关信息。

pkg-config 工具会通过以下两种途径寻找库的 .pc 文件:

  • 在系统默认的 .pc 文件目录(如 /usr/lib64/pkgconfig/)下寻找;
  • 通过环境变量 PKG_CONFIG_PATH 寻找。

在本文中,采用向环境变量 PKG_CONFIG_PATH 中添加 x265.pc 所在目录(即 /usr/local/lib/pkgconfig/)的方式解决 configure 命令的报错问题。修改环境变量 PKG_CONFIG_PATH 的命令如下:

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

说明:可以将上面的命令添加到系统配置文件(如 /etc/profile)或者用户配置文件中(如 ~/.bash_profile)中,以避免 PKG_CONFIG_PATH 的值在切换终端或系统重启后失效。

完成上述操作后,再次运行 ./configure --enable-gpl --enable-libx265 命令,就可以找到 x265 库的相关信息,也就不会再出现错误信息了。

Linux操作系统中pkg-config用法示例相关推荐

  1. linux下echo的用法,详细讲解:在Linux操作系统中Echo的用法

    下面主要用例子说明用法(bash环境下测试) 1.echo显示字符串 普通字符串可以在echo后直接输入字符串,但这样当要输出某些字符如\时会有问题(这种写法的时候\是被当作继行符处理过滤掉的,要输出 ...

  2. Linux操作系统中的make及makefile介绍

    本文主要介绍 Linux 操作系统中 make 及 makefile 的相关知识. 1 What make 是一个在软件开发过程中所使用的工具程序(utility software),通过读取&quo ...

  3. 在 Linux 操作系统中安装 Java

    在 Linux 操作系统中安装 Java 笔者的运行环境: CentOS Stream 8 x86_64 Java 11.0.12 进行这个教程之前,必须要先安装好一个 Linux 操作系统.这个 L ...

  4. linux下tail命令的用法,在Linux命令中tail的用法

    linux中的tail命令用途是按照要求将指定的文件的最后部分输出到标准设备,一般是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,如果该档案有更新,tail会自动刷新,确保你看到最新的档案 ...

  5. 在linux系统中进行路由探测,如何在Linux操作系统中运行Traceroute命令?

    Traceroute是Linux操作系统中的命令工具,可用于查看网络数据包的路由.Traceroute可以帮助确定网络数据包传输的质量好坏,同时对于排除缓慢的网络连接故障也很有用. 在租用 关于Tra ...

  6. linux六种进程状态,Linux操作系统中进程的七种状态

    Linux操作系统中进程的七种状态 发布时间:2018-05-07 20:43, 浏览次数:741 , 标签: Linux 1 Linux中进程的七种状态(1)R运行状态(runing):并不意味着进 ...

  7. mysql教程or怎么用_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  8. Linux操作系统中Anaconda的安装

    Linux操作系统中anaconda的安装 Anaconda由数据科学家为数据科学家建造,超过2000万人使用我们的技术来解决最棘手的问题. Anaconda其实就是一个开源的Python发行版本,其 ...

  9. sql语句中的in用法示例_PHP中的循环语句和示例

    sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...

  10. sql语句中的in用法示例_示例中JavaScript in操作符

    sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...

最新文章

  1. 初窥CSRF攻击方式以及Flask-WTF
  2. ORB-SLAM2地图存储加载系统
  3. android7.1.1大小,浅谈Android7.1.1 for 360 N5
  4. TPFanControl v0.62 + 汉化补丁
  5. python sys.argv[]用法
  6. linux-2.6.38 input子系统(用输入子系统实现按键操作)
  7. 以后再想大数据杀熟就没那么容易了
  8. window2012 密钥 标准版_Windows Server 2012 R2 密钥
  9. 使用BMfont制作含有中文图片的.fnt格式字体合图
  10. 阿里开源共享:IDE导入阿里编码规约格式化模板和注释模板
  11. mysql jemalloc_安装 jemalloc for mysql
  12. 高阶面试官应掌握哪些面试技巧
  13. 'C 语言' | 全排列解桥本分数式问题
  14. zk的watcher机制
  15. 漫漫的webim(一) web实现简易im功能
  16. python爬虫:模拟有道词典翻译文本
  17. 使用father打包发布前端工具库
  18. 山水之道第四境——精灵的飞天之舞
  19. ubuntu(Linux) 挂接小鹤音形 (基于IBus框架)
  20. VS Warring

热门文章

  1. 搞定操作系统面试,看这篇就够了(二)
  2. Linux入门基础命令(四)
  3. redis演练(1) 搭建redis服务
  4. 如何进行多语言发布,做国际化开发
  5. java 算法基础之一寻找最大公约数
  6. CentOS 6.2安装配置pacemaker
  7. 洛谷P2023 [AHOI2009]维护序列
  8. FCC算法题--Validate US Telephone Numbers
  9. Windows_cmd_命令
  10. keepalived+mysql双主高可用配置