转载自->这里  

  我们知道,linux编译源码包基本步骤无非是:configure,make,make install三部曲;configure过程中可能会遇到无法找到某些头文件和动态库;原因有两个:

(1)系统压根就没有这些头文件和动态库。(locate XXXX.h/so 未找到)

(2)已经安装相关的头文件和动态库。但未将头文件和动态库拷贝到标准路径下。

  对于第(2)中情况,我们可以通过配置PKG_CONFIG_PATH环境变量来解决头文件和动态库无法找到的问题;

先介绍一下pkg-config的用法:

pkg-config命令经常被用于Makefile文件用来找寻头文件和动态链接库,最常用的方式:

[root@localhost ~]# pkg-config --cflags --libs libcfg
-I/ext/corosync/include -L/ext/corosync/lib -lcfg

  上述命令用于返回libcfg.so的链接路径,以及相关的头文件路径。

pkg-config是如何找到libcfg.so的存放路径和头文件的存放路径的呢?pkg-config会查找libcfg.pc文件;该文件存

放了头文件和动态链接库的路径存放信息;libcfg.pc文件内容如下:

prefix=/ext/corosync
exec_prefix=${prefix}
libdir=/ext/corosync/lib
includedir=${prefix}/include Name: cfg
Version: 1.3.3
Description: cfg
Requires:
Libs: -L${libdir} -lcfg
Cflags: -I${includedir}

  那么pkg-config如何找到libcfg.pc文件的呢?相信同学们肯定猜到了,就是PKG_CONFIG_PATH环境变量;一般情况下动态库都存放在安装目录下的lib目录下,libcfg.so存放在/ext/corosync/lib/目录下;同时该目录下有一个pkgconfig目录,相信经常编译源代码的同学对这个目录并不陌生,该目录下存放的就是*.pc文件,存放着我们的动态库和头文件路径元数据。通过设置PKG_CONFIG_PATH为我们/ext/corosync/lib/pkgconfig;pkg-config命令就可以轻松找到*.pc

文件,进而找到路径信息。

  好了,经过上述设置后,configure便可以顺利的生成Makefile文件了。make,make install就可以了。

  到此为止,我们仅仅完成了程序的编译和链接,还有最后一步,程序运行;程序运行需要加载动态链接库并运行,也需要找寻动态链接库的路径,pkg-config仅负责编译链接时头文件和动态链接库的查找。对于程序运行时加载动态链接库,pkg-config就无能为力了,此时需要用到ldconfig命令,该命令为程序运行时提供动态链接库的运行时绑定,通过加载/etc/ld.so.conf下的路径信息,生成动态库的缓存/etc/ld.so.cache,为程序运行时提供动态库的链接;通过ldconfig -p查看动态链接库缓存信息。因此需要将我们的动态链接库路径添加到/etc/ld.so.conf中,运行ldconfig更新cache,就大功告成了。

[Ubuntu]pkg-config和ldconfig的更多相关文章

  1. ubuntu redis config IP password

    ubuntu Redis安装测试.设置用户名密码 - zhangaik的博客 - CSDN博客 https://blog.csdn.net/zhangaik/article/details/79279 ...

  2. 【转】ubuntu 12.04 /sbin/ldconfig.real: /usr/local/lib/*.so.8 不是符号连接 解决办法

    原文网址:http://blog.csdn.net/shulianghe/article/details/21176059 最近在ubuntu12.04下使用sudo apt-get install安 ...

  3. anaconda2下面安装opencv2.4.13.4完成----解决默认安装的问题----Thefunction is not implemented. Rebuild the library with Windows, GTK+ 2.x orCarbon support. If you are on Ubuntu or Debian, install libgtk2.0‑dev and pkg

    转载自:http://blog.csdn.net/qingyanyichen/article/details/73550924 本人下载编译安装了opencv2.4.9,oppencv2.4.10,o ...

  4. ubuntu完美搭建git服务器【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/38779667 最近公司项目需要用到Git来管理项目,正好逢周末花了点时间在虚拟机的unbunt ...

  5. Ubuntu下GCC的安装以及版本控制

    在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get  build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...

  6. ubuntu 14.04查看java的安装路径

    有时候,使用apt-get install 安装了某个软件之后,却不知道这个软件的安装路径在哪里. 那怎么样去找出这个软件的安装路径呢? 下面我们java 这个软件为例, 找出ubuntu 14.04 ...

  7. Ubuntu下 git 服务器的搭建【转】

    转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1   配置服务器前的准备工作 首先ubuntu系统 ...

  8. Ubuntu / Raspberry 下切换GCC版本

    目前Ubuntu 自带的GCC版本为4.6,遗憾的是在实际使用时,反而版本越高越好问题越多,所以,一旦遇到编译问题时最好先检查你下载的工程里的readme,默认的编译器版本是否为当前的安装版本,如果不 ...

  9. 怎样在Ubuntu手机平台中开发Cordova HTML5应用

    我们知道Cordova HTML5应用具有夸平台的特性,同一时候也具有訪问本地一些资源的能力.在今天的这篇文章中.我们将介绍一下怎样创建并执行一个Cordova HTML5的应用到我们的Ubuntu手 ...

  10. git config 介绍

    转载. https://blog.csdn.net/liuxiao723846/article/details/83113317 Git的三个重要配置文件分别是/etc/gitconfig,${HOM ...

随机推荐

  1. 使用第三方工具Thumbnailator动态改变图片尺寸

    Thumbnailator项目git地址:https://github.com/coobird/thumbnailator 使用步骤 1.添加依赖 <!-- Thumbnailator图片处理 ...

  2. git本机服务器配置(二):TortoiseGit的安装

    1. 下载TortoiseGit https://tortoisegit.org/ 1.1 下载安装包 下载对应安装包,如果不知道自己该下载哪个,那就下载32位的. 1.2 下载语言包 下载和安装包相 ...

  3. 2018-2019-2 20165325 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    2018-2019-2 20165325 <网络对抗技术> Exp6 信息搜集与漏洞扫描 实验内容(概要) 1 各种搜索技巧的应用: 2 DNS IP注册信息的查询: 3 基本的扫描技术 ...

  4. HDMI热插拔检测原理

    HDMI(19Pin)/DVI(16 pin)的功能是热插拔检测(HPD),这个信号将作为主机系统是否对HDMI/DVI是否发送TMDS信号的依据.HPD是从显示器输出送往计算机主机的一个检测信号.热 ...

  5. 关于/tmp/ 目录自动清理文件

    问题:今天开发人员给我说了一个错误:The temporary upload location [/tmp/tomcat.1337767218595042057.80/work/Tomcat/loca ...

  6. 记录一个pom文件

    rt <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://m ...

  7. html注意事项

    行级元素只能嵌套行级元素 块级元素可以嵌套任何元素 格力  p标签不能嵌套div a标签不能嵌套a标签

  8. IIS+nginx反向代理 负载均衡

    本文没有过多的讲述,只讲述重点地方.由这两个转自的文章进行中和 1.nginx+iis实现负载均衡(这篇文章主要是有第2篇文章的工具) 2.nginx+iis使用(这篇文章讲得很详细,配置文件直接复制 ...

  9. 【转载】django 过滤器 、日期格式化参数

    过滤器相关: 一.形式:小写{{ name | lower }} 二.串联:先转义文本到HTML,再转换每行到 标签{{ my_text|escape|linebreaks }} 三.过滤器的参数显示 ...

  10. 软件工程---作业(one)

    (1) 回顾你过去将近3年的学习经历 1.1 有序列表项一当初你报考的时候,是真正喜欢计算机这个专业吗? 自己填写来着,对这个专业也不是特别了解:导致后续学习很差 1.2 有序列表项二你现在后悔选择了 ...