pkg-config使用

1 pkg-config介绍

pkg-config用来检索系统中安装库文件的信息。典型的是用作库的编译和连接。如在Makefile中:

program: program.c

    cc program.c `pkg-config --cflags --libs gnomeui`


pkg-config --list-all    可以列出所有可使用的包。

pkg-config要求库提供一个.pc元数据文件,从这些文件中检索库的各种必要信息,包括版本信息,编译和连接需要的参数等。这些信息可以通过pkg-config提供的参数(如--cflags, --libs)单独提取出来直接供编译器和连接器使用。

默认情况下,每个支持pkg-config的库对应的.pc文件,在安装后,都位于目录/usr/lib/pkgconfig目录下。

环境变量PKG_CONFIG_PATH是用来设置.pc文件的搜索路径的,pkg-config按照设置路径的先后顺序进行搜索。这样,库的头文件的搜索路径的设置实际上就变成了对.pc文件搜索路径的设置。

2 pkg-config功能

一般来说,即使是使用同一个库,不同的用户在安装时也可能会安装在不同的目录下。这样在编译时使用-I参数指定include路径,在连接时使用-L参数指定lib库的路径,可能造成了编译,连接的不一致,同一份程序从一台机器copy到另一台机器时就可能会出现问题。

pkg-config就是用来解决编译连接界面不统一问题的一个工具。

它的基本思想:事先把库的各种必要信息保存在.pc文件中,需要的时候可以使用参数(--cflags, --libs),将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc文件就可以准确定位,可以使用相同的编译和连接命令,使得编译和连接界面统一。

它提供的主要功能有:
<1> 检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。
<2> 获得编译预处理参数,如宏定义,头文件的路径。
<3> 获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。
<4> 自动加入所依赖的其他库的设置。

3 gtk+-2.0的.pc文件内容举例

prefix=/usr

exec_prefix=/usr

libdir=/usr/lib

includedir=/usr/include

target=x11

 

gtk_binary_version=2.4.0

gtk_host=i386-redhat-linux-gnu

 

Name: GTK+

Description: GIMP Tool Kit (${target} target)

Version: 2.6.7

Requires: gdk-${target}-2.0 atk

Libs: -L${libdir} -lgtk-${target}-2.0

Cflags: -I${includedir}/gtk-2.0


如果要使用gtk+的库编译一个程序,可以如下:

$gcc -c program.c -o program `pkg-config "gtk+-2.0>2.0.0" --cflags --libs`


其中,--cflags参数提取出编译所需的选项,--libs参数提取出连接时的选项。上面一步也可以分成两步如下:

$gcc -c program.c `pkg-config --cflags "gtk+-2.0>2.0.0"`

$gcc -o program program.o `pkg-config --libs "gtk+-2.0>2.0.0"`


4 环境变量PKG_CONFIG_PATH

在安装完一个需要使用的库后,比如Glib,一是将相应的.pc文件,如glib-2.0.pc拷贝到/usr/lib/pkgconfig目录下,二是通过设置环境变量PKG_CONFIG_PATH添加glib-2.0.pc文件的搜索路径。

尤其是不完全使用新安装的库取代旧库的时候,使用环境变量可能是更好的选择,因为环境窗口的设置只对当前终端窗口有效。

使用环境变量的方法,只需修改PKG_CONFIG_PATH和LD_LIBRARY_PATH变量。LD_LIBRARY_PATH变量主要是添加新安装库的搜索路径。

如新的Glib库安装在/usr/local/glib-2.0/lib下,可以编辑文件set_glib-2.0:

export PKG_CONFIG_PATH=/usr/local/lib/glib-2.0/lib/pkgconfig:$PKG_CONFIG_PATH

export LD_LIBRARY_PATH=/usr/local/lib/glib-2.0/lib:$LD_LIBRARY_PATH


每次使用时,source下就行了:

$source set_glib-2.0


5 其他的config

$ls /usr/bin/*config


参考:
1. ld.so.conf 文件与PKG_CONFIG_PATH变量,http://www.91linux.com/html/article/program/cpp/20071207/8934.html

2. Makefile好助手:pkgconfig, http://blog.mcuol.com/User/AT91RM9200/Article/7457_1.htm
3. pkg-config使用,http://blog.chinaunix.net/u/12467/showart_246860.html
### 回答1: Windows下的pkg-config是一个用于管理和使用编译时和链接时的依赖项的程序。它最初是为Linux和类Unix系统开发的,但也被移植到了Windows上。 pkg-config可以帮助开发人员轻松地查找和安装所需的库。它为开发人员提供了一种简单的方式来指定和管理程序所需的依赖项。这对于跨平台开发和移植软件非常有用,因为不同的操作系统可能需要不同的库。 使用pkg-config,开发人员可以在编译和链接时引用已安装的库,而不必手动指定包含路径、编译选项等等。这极大地简化了软件开发的过程,并减少了错误和编译问题的可能性。 需要注意的是,Windows下的pkg-config需要和一些库一起使用,如Cygwin和MinGW等。此外,它也可能与一些IDE不兼容,如Visual Studio。 总之,pkg-config是一个非常有用的工具,可以方便地管理和使用编译时和链接时的依赖项,从而简化了软件开发的过程。 ### 回答2: Windows的pkg-config是一个命令行工具,用于帮助开发人员在Windows上查找和链接库文件。它通常用于Unix系统中,但在Windows上也可以使用它。 使用pkg-config可以告诉编译器库的位置,将需要的库文件链接到编译器的命令中。如果没有正确链接库文件,则编译器会报错并停止编译过程。 为了在Windows上使用pkg-config,首先需要安装MinGW和MSYS环境。然后将pkg-config文件夹添加到环境变量中,以便在命令行中访问它。接下来,开发人员需要在代码中包含所需库文件的路径,并调用pkg-config命令来查询和链接库文件。 总体而言,pkg-config在Windows开发过程中是一个非常有用的工具,可以简化开发人员查找和链接库文件的过程。 ### 回答3: Windows pkg-config是一个用于管理库和编译参数的工具,主要用于在Windows系统上编译和链接第三方库。它可以帮助开发者轻松地管理库的版本和依赖关系,减少编译和链接错误。这个工具最初是为Linux系统设计的,但是现在它已经过渡到了Windows平台上,被广泛应用于各种开发工具中。 Windows pkg-config使用一个名为.pc的配置文件,该文件描述库的元数据信息。使用这个配置文件,开发人员可以获得有关库的版本、包含头文件和库文件的路径、编译和链接选项等信息。在Windows系统上使用pkg-config需要安装该工具,并将其包含路径添加到编译器中。 使用pkg-config可以帮助开发人员更好地管理第三方库,尤其是对于包含多个库文件的大型库。通过pkg-config,可以轻松地检查库文件的版本和依赖关系,并在编译和链接时使用正确的库文件。这个工具可以增强代码的可移植性和可维护性,并减少代码错误和重复工作。因此,pkg-config被广泛应用于各种开发环境中,无论是开源项目还是商用软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值