[Ubuntu]pkg-config和ldconfig
转载自->这里
我们知道,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的更多相关文章
- ubuntu redis config IP password
ubuntu Redis安装测试.设置用户名密码 - zhangaik的博客 - CSDN博客 https://blog.csdn.net/zhangaik/article/details/79279 ...
- 【转】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安 ...
- 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 ...
- ubuntu完美搭建git服务器【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/38779667 最近公司项目需要用到Git来管理项目,正好逢周末花了点时间在虚拟机的unbunt ...
- Ubuntu下GCC的安装以及版本控制
在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...
- ubuntu 14.04查看java的安装路径
有时候,使用apt-get install 安装了某个软件之后,却不知道这个软件的安装路径在哪里. 那怎么样去找出这个软件的安装路径呢? 下面我们java 这个软件为例, 找出ubuntu 14.04 ...
- Ubuntu下 git 服务器的搭建【转】
转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1 配置服务器前的准备工作 首先ubuntu系统 ...
- Ubuntu / Raspberry 下切换GCC版本
目前Ubuntu 自带的GCC版本为4.6,遗憾的是在实际使用时,反而版本越高越好问题越多,所以,一旦遇到编译问题时最好先检查你下载的工程里的readme,默认的编译器版本是否为当前的安装版本,如果不 ...
- 怎样在Ubuntu手机平台中开发Cordova HTML5应用
我们知道Cordova HTML5应用具有夸平台的特性,同一时候也具有訪问本地一些资源的能力.在今天的这篇文章中.我们将介绍一下怎样创建并执行一个Cordova HTML5的应用到我们的Ubuntu手 ...
- git config 介绍
转载. https://blog.csdn.net/liuxiao723846/article/details/83113317 Git的三个重要配置文件分别是/etc/gitconfig,${HOM ...
随机推荐
- spring的基于注解的IOC配置
1.配置文件配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http: ...
- es集群数据库~运维相关
一 数据同步方案 1 ES-JDBC 不能实现删除同步操作.MYSQL如果删除,ES不会删除 2 logstash-input-jdbc 能实现insert update,但是仍然不能实现删除 ...
- Maven - 镜像<mirror>
使用镜像如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库),你可以使用set ...
- Appnium-API-Dvice
Device Activity Start Activity Start an Android activity by providing package name and activity name ...
- 防盗链之URL参数签名
一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...
- 1、js的基本对象和垃圾回收
js常用的基本类型:Undefined,null,string,number,boolen 还有一种复杂的数据类型 object.判断类型可以用 typeof. 确定值是否是有穷的,isFinite, ...
- python之可变长参数
参数组:*args,**kwargs 实参有按位置和按关键字两种形式定义,*args和**kwargs 位置参数:按照从左到右的顺序定义的参数 位置形参:必选参数 位置实参:按照位置给形参传值 关键字 ...
- Docker----起步(2)----在Ubuntu上安装最新版的Docker CE
之前写了一篇文章关于Docker安装的博客,最近再次使用的时候,在docker的官方文档上发现最新版本的Docker(V18.03)的安装方式和之前有点区别,有一些命令发现不能用了.(真的是一天不学习 ...
- Scyther spdl(比较准确的翻译)
1.协议的主要的核心是定义一个协议在协议中声明角色: Protocol ExampleProtocol(I,R){ role I{ }; role R{ }://在角色中一开始我们没有定义角 ...
- 企业面试必会shell
企业面试题1: 使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为: [root@oldboy oldboy]# sh /serv ...