1. pkg-config介绍

pkg-config是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。

它输出已安装的库的相关信息,包括:1. C/C++编译器需要的输入参数;2. 链接器需要的输入参数;3. 已安装软件包的版本信息。

当安装一个库时(例如从RPM,deb或其他二进制包管理系统),会包括一个后缀名为pc的文件,它会放入某个文件夹下(依赖于你的系统设置)。例如,在Linux为该软件的库文件所在文件夹lib之下的子文件夹pkgconfig。把该子文件夹加入pkg-config的环境变量PKG_CONFIG_PATH作为搜索路径,例如在bash配置文件中加入:

$ export PKG_CONFIG_PATH=/usr/local/库名字/lib/pkgconfig:$PKG_CONFIG_PATH

在这个.pc文件里包含有数个条目。这些条目通常包含用于其他使用这个库的程序编译时需要的库设置,以及头文件的位置,版本信息和一个简介。以OpenCV为例,在Mac上pkgconfig目录所在的路径为:/usr/local/Cellar/opencv3/3.1.0_4/lib/pkgconfig/,目录下的.pc文件为opencv.pc,其内容为:

# Package Information for pkg-config

prefix=/usr/local/Cellar/opencv3/3.1.0_4

exec_prefix=${prefix}

libdir=${exec_prefix}/lib

includedir_old=${prefix}/include/opencv

includedir_new=${prefix}/include

Name: OpenCV

Description: Open Source Computer Vision Library

Version: 3.1.0

Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

Libs.private: -framework OpenCL -framework Cocoa -L/usr/local/opt/jpeg/lib -ljpeg -L/usr/local/lib -lwebp -lpng -ltiff -lImath -lIlmImf -lIex -lHalf -lIlmThread -L/usr/lib -lz -framework QTKit -framework QuartzCore -framework AppKit

Cflags: -I${includedir_old} -I${includedir_new}

2. pkg-config的使用

在Linux/Mac系统下编写C、C++程序时,编译时需要包含头文件,链接时需要库文件,但安装一些第三方库之后不知道对应的include文件和lib文件的位置,此时就需要pkg-config了。以opencv为例:

查看头文件位置

# 命令形式:pkg-config --cflags software_name

# demo

$ pkg-config --cflags opencv

-I/usr/local/Cellar/opencv3/3.1.0_4/include/opencv -I/usr/local/Cellar/opencv3/3.1.0_4/include

查看lib库的位置

# 命令形式:pkg-config --libs software_name

# demo

$ pkg-config --libs opencv

-L/usr/local/Cellar/opencv3/3.1.0_4/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lippicv -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core

编译程序,编译DispalyImage.cpp文件

DispalyImage.cpp文件内容为:

#include

#include

#include

#include

using namespace std;

using namespace cv;

int main()

{

Mat img = imread("./lena.bmp");

if(!img.data)

{

return -1;

}

namedWindow("Lena", CV_WINDOW_AUTOSIZE);

imshow("Lena", img);

waitKey();

return 0;

}

编译,链接生成可执行程序DisplayImage:

$ g++ -o DisplayImage $(pkg-config --cflags --libs opencv) DisplayImage.cpp

运行结果:

Lena

参考资料:

linux 安装pkg文件,Linux的pkg-config命令相关推荐

  1. linux 安装bz2文件,linux下.bz2文件的安装

    linux版本比较多,具体命令可能不太一样,以redhat为例: 1首先将iso文件挂载,mount -t iso9660 -o loop /dev/sr0 /mnt/cdrom 2创建本地yum源, ...

  2. linux桌面怎么解压tar文件,linux安装tar文件,linux怎么解压targz

    这几年随着XP系统的退役,国产操作系统逐渐的成为了电脑的热点话题,基于linux内核的国产操作系统是否能够被大众接受是一个至关重要的问题,那么linux的基本操作中,linux(Ubuntu)如何安装 ...

  3. Linux下常见文件解压方法及命令

    Linux下常见文件解压方法及命令时间:2007-01-08 18:34来源:CSDN作者:bitsCN编辑字体:[大 中 小]1.以.a为扩展名的文件: #tar xv file.a 2.以.z为扩 ...

  4. linux的头文件下载,Linux内核头文件(linux headers)

    更新 Linux 内核头文件(linux headers) 三 8th, 2013 2,474 views | 发表评论 | Trackback 一般来说,如果不是自己编译 kernel,那么更新头文 ...

  5. linux 下删除批量文件命令,linux 批量删除文件与空文件删除命令linux操作系统 -电脑资料...

    在linux中删除文件与删除目录及删除空文章都是使用rm 命令了,执行rm指令可删除文件或目录,如欲删除目录必须加上参数\"-r\",否则预设仅会删除文件,下面我来介绍在linux ...

  6. linux 进入编辑文件,保存退出相关命令

    linux 进入编辑文件,保存退出相关命令 1.进入文件 vim 文件名(vim test.xml) 2.编辑完成之后,按ESC键 跳到命令模式(命令前面冒号是必要的): :w 保存文件但不退出vi ...

  7. linux默认头文件,Linux安装合适内核头文件的方法

    摘要 腾兴网为您分享:Linux安装合适内核头文件的方法,桌面时钟,中建在线,圆通金刚,西餐菜谱等软件知识,以及万象,我不信表情包,兔子洞,服你网,电商直播app,网络工具箱,ffu文件,电脑功率计算 ...

  8. linux安装whl文件

    Windows环境: 安装whl包:pip install wheel -> pip install **.whl 下载whl文件MySQL_python-1.2.5-cp27-none-win ...

  9. linux编辑音频文件,Linux下载安装ocenaudio音频编辑器

    ocenaudio虽然没有像Audacity那样强大,但Ocenaudio仍然是一个直观并且免费的音频编辑器,并且支持Linux及Windows.Mac OS X操作系统.如果你只需要进行一些简单的音 ...

  10. go给Linux安装mysql_在Linux上安装Go语言开发包

    前面我们介绍了在 Windows 系统上来搭建Go语言开发包,本节将为大家讲解在 Linux 平台安装Go语言开发包,大家可以在Go语言官网找到对应的安装包(https://golang.google ...

最新文章

  1. docker logs 查看实时日志
  2. 2019.03.13 ZJOI2019模拟赛 解题报告
  3. codeforces 15C. Industrial Nim
  4. Python从入门到精通:Python装饰器详解
  5. 大数据集群搭建之节点的网络配置过程(二)
  6. 我太难了!男子打赏女主播被骗9.6万,求助“好心人”再度被骗...
  7. 安装配置rsync服务端
  8. Android 中shape的使用(圆角矩形)
  9. 「leetcode」202. 快乐数:今天你快乐了么?
  10. idea控制台搜索功能
  11. AlphaGo是如何实现的
  12. 电子科技大学软件工程860考研专业课真题考频总结
  13. 服务网格在好未来学而思网校的实践和思考
  14. 百钱买百鸡问题的解法与思路
  15. 天津理工大学计算机项目管理实验四,天津理工大学软件工程实验报告4.docx
  16. 老司机带你飞——DIY桌面小电视
  17. python re.split 空格_str.split和re.split中空格的区别
  18. 不学好数学也想当数据科学家?不存在的
  19. Android ArcGIS基础使用教程(10.2.8)
  20. vue3.0性能优化点之静态标记(PatchFlag)

热门文章

  1. android nfc P2P模式
  2. PHP中常用的十个字符串函数
  3. 技术解读:Dragonfly 基于 P2P 的智能镜像加速系统 | 龙蜥技术
  4. H5前端实现微信分享(处理二次分享问题)
  5. jQuery停止动画——stop()方法的使用
  6. 中科院文新:深度学习入门基础与学习资源
  7. unity 3d实例:创建游戏对象、旋转的立方体、Unity3D Button、图片按钮、Box控件、Label控件、Background Color、Color
  8. 围棋规则的计算机实现
  9. Spring Boot启动参考指南(官方版)
  10. 利用接口检查日期是否为法定节假日