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 脚本就可以解决该问题。

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

  1. 计算机技术在钢结构制作中应用,计算机在大型钢结构整体安装中控制技术及应用.doc...

    计算机在大型钢结构整体安装中控制技术及应用 计算机在大型钢结构整体安装中控制技术及应用[摘要]针对近年来高.重.大.特殊钢结构的不断涌现,传统的结构安装施工工艺与设备往往难以胜任,将计算机.信息处理. ...

  2. 类项目中的配置文件app.config在打包安装后的信息获取的问题

    在一个项目中碰到这样的一个问题,做一个WORD插件,功能在类库项目中实现了,配置信息存在类库项目的配置文件app.config中,在进行打包后,获取的配置文件中的DocType节点信息时,使用以下方法 ...

  3. Linux中的configure、pkg-config、pkg_config_path

    提到这三个名词我相信搞Linux的人一定不会陌生,重要性不言而喻,下面我就要总结下三者之间的关系. configure一般都是一个脚本,执行时可以传入必要的参数告知配置项目.一般的开源软件,下载完源代 ...

  4. Linux中的configure命令作用,linux系统configure命令详解

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 对于已经熟悉或者说习惯了Windows系统的朋友来说,Linux系统的软件安装,可以说并不是一件容易的事情;如果通过源代码 ...

  5. 小知识:linux中的./configure --prefix和--host的作用

    一般而言,源码的安装共三个步骤:配置(configure).编译(make).安装(make install). --prefix的作用是指定安装路径,若是不进行该选项的配置,安装之后的可执行文件默认 ...

  6. Linux系统下Configure命令参数解释说明

    "configure"脚本有大量的命令行选项.对不同的软件包来说,这些选项可能会有变化,但是许多基本的选项是不会改变的.带上'-- help'选项执行'configure'脚本可以 ...

  7. Linux - 如何生成configure文件

    Linux - 如何生成configure文件 简介 本文简单地介绍一下如何生成configure文件,主要目的是把握整体的流程,以后如果要用到再仔细阅读对应文档. 整体的过程 在Linux下面手动编 ...

  8. 在linux中怎么编程软件下载,linux系统下载软件解压后怎么安装

    用户提问 linux系统里安装软件问题,可是怎么就是安装不了,请高手指教,最好详细点带个例子!还有,安装路径最好说明,谢谢了!满意肯定加分! 推荐答案 现在一般是使用 RPM ,YUM 和 APT 来 ...

  9. [学习笔记]在Linux中使用源码编译的方式安装Nginx

    准备工作 准备nginx源码包: nginx: downloadhttp://nginx.org/en/download.html准备相关的依赖包以及环境: gzip 模块需要 zlib 库  zli ...

最新文章

  1. ACM入门之【高精度】
  2. h5比html新增加的标签,HTML5(H5)新增属性和标签
  3. PHP写猜数字,PHP算法之猜数字
  4. 微服务系列 —— 一小时搞定Eureka
  5. mysql group by能用到索引吗_`MySQL GROUP BY使用索引时速度较慢
  6. Mozilla Firefox 在用户访问被黑客攻击的网站时发出警告
  7. kafka计算机专业读法_面试官:Kafka 为什么快?
  8. 处理异常:org.springframework.beans.factory.BeanNotOfRequiredTypeException
  9. ThinkPHP中的三大自动简介
  10. HDFView 3.1.2win10百度云资源
  11. ps4html5播放器,PS4迎来全新媒体播放器 支持多种视频音频格式
  12. 后台提示登录失败----YYC松鼠短视频开源
  13. mysql报错解决方式:1449 - The user specified as a definer (‘root‘@‘%‘) does not exist
  14. 【这很AI】是福是祸?科学家利用AI翻译狗的语言,人狗对话将成可能
  15. 02325《计算机系统结构》自考大题:第 1、2、3 章
  16. Unity遮罩 反向遮罩实现
  17. 计算机电缆yjv,zr电缆(yjv电缆与zryjv电缆区别)
  18. 自适应变异麻雀搜索优化算法
  19. JMeter官方文档翻译----如何开始JMeter-1
  20. 十年,从“去IOE”走出来的阿里云

热门文章

  1. 环境搭建之八-- node.js, npm和yarn
  2. /etc/rsyncd.conf
  3. Head First设计模式之策略模式(Strategy)
  4. node.js之path模块的使用
  5. JDBC PreparedStatement 实现原理【推荐阅读】
  6. C语言 · 分糖果
  7. 《Java Web高级编程——涵盖WebSockets、Spring Framework、JPA H
  8. C++ 容器vector的范例学习
  9. RAISE_APPLICATION_ERROR用法
  10. HTML 資訊汲取(中篇) - Default namespace 問題