pkg-config原理及用法
原文 https://blog.csdn.net/luotuo44/article/details/24836901
我们在用第三方库的时候,经常会用到pkg-config这个东西来编译程序。那pkg-config究竟是什么呢?本博文简单地说一下。
pkgconfig有什么用:
大家应该都知道用第三方库,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。
对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。如果你的系统装有gtk,可以尝试一下下面的命令$pkg-config --cflags gtk+-2.0。可以看到其输出是gtk的头文件的路径。
我们平常都是这样用pkg-config的。$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main
上面的编译命令中,`pkg-config --cflags --libs gtk+-2.0`的作用就如前面所说的,把gtk的头文件路径和库文件列出来,让编译去获取。--cflags和--libs分别指定头文件和库文件。
Ps:命令中的`不是引号,而是数字1左边那个键位的那个符号。
其实,pkg-config同其他命令一样,有很多选项,不过我们一般只会用到--libs和--cflags选项。更多的选项可以在这里查看。
配置环境变量:
看到这里,大家可能想试一下将pkg-config用于自己的库。下面就说一下,怎么写。
首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位置。pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。
但pkg-config又是如何找到所需的.pc文件呢?这就需要用到一个环境变量PKG_CONFIG_PATH了。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。
对于Ubuntu系统,可以用root权限打开/etc/bash.bashrc文件。在最后输入下面的内容。
这样,pkg-config就会去/usr/local/lib/pkgconfig目录下,寻找.pc文件了。如果不是Ubuntu系统,那就没有/etc/bash.bashrc文件,可以参考我的一篇博文,来找到一个合适的文件,修改这个环境变量。输入bash命令使得配置生效。
现在pkg-config能找到我们的.pc文件。但如果有多个.pc文件,那么pkg-config又怎么能正确找到我想要的那个呢?这就需要我们在使用pkg-config命令的时候去指定。比如$gcc main.c `pkg-config --cflags --libs gtk+-2.0` -o main就指定了要查找的.pc文件是gtk+-2.0.pc。又比如,有第三方库OpenCV,而且其对应的pc文件为opencv.pc,那么我们在使用的时候,就要这样写`pkg-config --cflags --libs opencv`。这样,pkg-config才会去找opencv.pc文件。
pc文件书写规范:
好了,现在我们开始写自己的.pc文件。只需写5个内容即可:Name、Description、Version、Cflags、Libs。
比如简单的:
- Name: opencv
- Description:OpenCV pc file
- Version: 2.4
- Cflags:-I/usr/local/include
- Libs:-L/usr/local/lib –lxxx –lxxx
其中Name对应的内容要和这个pc文件的文件名一致。当然为了书写方便还会加入一些变量,比如前缀变量prefix。下面有一个更完整的pc文件的内容
其中,Cflags和Libs的写法,是使用了-I -L -l这些gcc的编译选项。原理可以参考我的一篇博文。
pkg-config原理及用法的更多相关文章
- Nmap扫描原理与用法
Nmap扫描原理与用法 1 Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Audit ...
- PHP依赖注入原理与用法分析
https://www.jb51.net/article/146025.htm 本文实例讲述了PHP依赖注入原理与用法.分享给大家供大家参考,具体如下: 引言 依然是来自到喜啦的一道面试题,你知道什么 ...
- JSON Web Token(JWT)原理和用法介绍
JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案.今天给大家介绍一下JWT的原理和用法. 官网地址:https://jwt.io/ 一.跨域身份验证 Internet服务无法与 ...
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)
简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...
- Web安全学习笔记之Nmap扫描原理与用法
1 Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字N ...
- 初涉IPC,了解AIDL的工作原理及用法
初涉IPC,了解AIDL的工作原理及用法 今天来讲讲AIDL.这个神奇的AIDL,也是近期在学习的,看了某课大神的解说写下的blog,希望结合自己的看法给各位同价通俗易懂的解说 官方文档:http:/ ...
- 41、扩展原理-ApplicationListener用法
41.扩展原理-ApplicationListener用法 ApplicationListener 监听容器中发布的事件.事件驱动模型开发: public interface ApplicationL ...
- Python实现的选择排序算法原理与用法实例分析
Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...
- Python函数装饰器原理与用法详解《摘》
本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...
随机推荐
- 【noip模拟赛3】贾老二的工件 (模拟)
描述 贾老二有很多工件,最常见的工件都是长条形的,但其顶端是凹凸不平的,即不同位置的高度不同.现在贾老二有两个最常见的工件,他想将它们完全放入另一种罕见的可容纳高度不超过k的工件中,问该罕见的工件的最 ...
- JS代码浏览器兼容性 之 new Date()
这里只测试3个浏览器的情况:IE, 火狐,谷歌. 一. 无参 //无参 var dateTime = new Date(); 所有浏览器都兼容,GOOD 二. 日期参数 //日期参数 格式1 var ...
- Linux块设备驱动详解
<机械硬盘> a:磁盘结构 -----传统的机械硬盘一般为3.5英寸硬盘,并由多个圆形蝶片组成,每个蝶片拥有独立的机械臂和磁头,每个堞片的圆形平面被划分了不同的同心圆,每一个同心圆称为一个 ...
- HDU.5181.numbers(DP)
题目链接 参考. \(Description\) 将\(1,2,\cdots,n(n\leq 300)\)依次入栈/出栈,并满足\(m(m\leq 90000)\)个形如\(x\)要在\(y\)之前出 ...
- loj2048 「HNOI2016」最小公倍数
link 题意: 给定一张$N$个顶点$M$条边的无向图(顶点编号为$1,2,...,n$),每条边上带有权值.所有权值都可以分解成$2^a \cdot 3^b$的形式. 现在有$q$个询问,每次询问 ...
- 【转载】VC IME 通信
文本输入框作为一个最基本的UI控件,被众多UI框架默认支持.Windows下最简单的就是CEdit(WTL封装),也有更为复杂的CRichEdit(WTL封装).文本输入框是基本控件中最难实现的控件之 ...
- Xtreme9.0 - Light Gremlins 容斥
Xtreme9.0 - Light Gremlins 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenge ...
- 2013-2014 ACM-ICPC, NEERC, Southern Subregional Contest Problem D. Grumpy Cat 交互题
Problem D. Grumpy Cat 题目连接: http://www.codeforces.com/gym/100253 Description This problem is a littl ...
- SVN提示https证书验证失败问题svn: E230001: Server SSL certificate verification failed:
最近在使用Idea 检出 svn项目时,出现了如下的画面 显示需要授权证书,需要证书路径 搜索网上的解决方式:无非以下几种 1.File->Settings->Version Contro ...
- Mac 10.12使用free命令(fish)
前提:要使用free命令,可以安装fish shell,然后在里面安装free插件. 安装fish brew install fish 安装free fish fisher free 使用 fish ...