Linux中的configure、pkg-config、pkg_config_path和安装中的PKG_CONFIG_PATH问题 pkgconfig

Linux中的configure、pkg-config、pkg_config_path

提到这三个名词我相信搞Linux的人一定不会陌生,重要性不言而喻,下面我就要总结下三者之间的关系。

configure一般都是一个脚本,执行时可以传入必要的参数告知配置项目。一般的开源软件,下载完源代码,解压后都会在解压后目录中找到configure文件,执行./configure文件就会生成Makefile文件,而configure脚本在检查相应环境时会通过pkg-config的工具来检测相应依赖环境。

pkg-config这一工具是用来检索系统中安装库文件的信息。其主要功能如下:

1、检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息

,避免链接错误版本的库文件。

2、获得编译预处理参数,如宏定义,头文件的位置。

3、获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数。

4、自动加入所依赖的其它库的设置。

由于使用pkg-config工具来获得库的选项,所以不论库安装在什么目录下,都可以使用相同的编译和连接命令,带来了编译和连接界面的统一。但使用pkg-config工具提取库的编译和连接参数有两个基本的前提:

1、库本身在安装的时候必须提供一个相应的.pc文件,如果没有.pc文件的软件则一般是不支持pkg-config工具的使用的。

2、pkg-config必须知道要到哪里去寻找此.pc文件

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

下面就针对一个具体的情况来说明问题:在很多人编译GTK程序时都会出现说gtk.h文件找不到,之所以会出现这种问题就归咎于环境变量没有配置,我们通过上面的叙述,首先我们要做的就是找到其对应的.pc文件,在终端中输入pkg-config --modversion gtk+-2.0,提示找不到xproto.pc文件,需要把包含该文件的目录放到PKG_CONFIG_PATH里,搜索了一下,该文件在/usr/share/pkgconfig下,那么我们就改环境变量喽:export PKG_CONFIG=/usr/local/bin/pkg-config

export PKG_CONFIG_PATH=/usr/share/pkgconfig:/usr/lib/pkgconfig,好了,这样一切都OK了,

在我们编译对应程序时,输入的命令为gcc Demo.c -o Demo `pkg-config --cflags --libs --gtk+-2.0`

=============================================================================================

在安装开源软件的过程中, 经常会碰到提示配置PKG_CONFIG_PATH路径, 或者直接提示没有安装某某库, 但是我们已经安装了啊。

其实造成这种情况的原因很简单, 就是安装的目录不能被依赖程序找到。

具体的原理可以网上搜索 configure, pkg-config , PKG_CONFIG_PATH这三者直接的关系。此处不再赘述。

解决方法就是让依赖库能找到我们的安装目录即可。

下面我们来举个例子:

比如我们安装 A 这个库, 执行 ./configure的时候提示要先安装 B 这个库。

我们下载了B这个库, 并安装后, 我们在B的源码路径下执行 find  ./  -name  "*.pc"  找到的文件一般为B.pc,

然后我们把B.pc这个文件复制到操作系统的pkgconfig目录:

32为系统的pkgconfig目录为  /usr/lib/pkgconfig/

64为系统的pkgconfig目录为  /usr/lib64/pkgconfig/

cp   B.pc   /usr/lib64/pkgconfig/

然后在执行 A这个库的 ./configure 脚本就可以解决该问题。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值