Linux下的pkg-config简介

本文主要介绍Linux系统中的pkg-config工具的相关内容。

1 概述

pkg-config - Return metainformation about installed libraries.

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.

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用于返回系统上已安装的库的相关信息,这些信息在使用该库编译某个程序时就会用到。

2 示例

例如,我在系统上安装了x264,其对应的库文件为/usr/local/lib/libx264.so,头文件为/usr/local/include/x264.h,这些信息都包含在/usr/local/lib/pkgconfig/x264.pc文件中了,x264.pc文件内容如下:

[root@infield_demo /opt/ffmpeg-4.1.3]# cat /usr/local/lib/pkgconfig/x264.pc 
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: x264
Description: H.264 (MPEG4 AVC) encoder library
Version: 0.157.x
Libs: -L${exec_prefix}/lib -lx264 
Libs.private: -lpthread -lm -ldl
Cflags: -I${prefix}/include
[root@infield_demo /opt/ffmpeg-4.1.3]# 

x264.pc文件中的这些信息,当我们使用x264编译生成某些程序(如ffmpeg)的时候就会用到。

现以编译ffmpeg为例,进一步介绍一下pkg-config的作用。当我们在编译ffmpeg时,首先通过./configure --enable-gpl --enable-libx264命令构造编译选项。由于我们指定了要使用x264库,所以该动作就会去找x264库的相关信息。在本例中,x264库为/usr/local/lib/libx264.so,没有安装在系统默认路径下。configure脚本会通过以下几个途径寻找x264库:

  • 使用-L(或configure脚本定义的相关命令)手动指定的共享库路径
  • 系统默认共享库路径:/usr/lib64
  • /etc/ld.so.conf配置文件中的共享库路径,及/etc/ld.so.conf.d/目录下配置文件的共享库路径
  • 系统默认pkgconfig路径/usr/lib64/pkgconfig/目录下的配置文件*.pc中的共享库路径,及环境变量PKG_CONFIG_PATH中配置的共享库路径
  • 环境变量LD_LIBRARY_PATH配置的共享库路径

默认情况下,configure脚本是找不到x264库的,所以configure脚本会报警告“WARNING: using libx264 without pkg-config”。为了消除此警告,我们就可以通过配置pkgconfig的相关信息来实现(当然,也可根据上面所列的其他途径进行解决),这里我们通过配置PKG_CONFIG_PATH环境变量,将x264的pc文件路径(即/usr/local/lib/pkgconfig/)添加到PKG_CONFIG_PATH中即可,命令如下:

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

完成上述操作后,我们再次运行configure脚本,就不会出现警告信息了。

通过上面的这个例子可以看出,pkgconfig可理解为配置共享库、头文件等编译选项信息的一个工具。

 

 

你可能感兴趣的:(Linux)