多版本opencv管理 --pkg-config

y@y-workstation:~$ pkg-config --cflags opencv4
-I/usr/local/opencv4.4.0/include/opencv4
y@y-workstation:~$ pkg-config --cflags opencv
-I/usr/local/opencv2.4.11/include/opencv -I/usr/local/opencv2.4.11/include
y@y-workstation:~$ pkg-config --cflags opencv3
-I/usr/local/include/opencv -I/usr/local/include
y@y-workstation:~$ pkg-config --cflags opencv
-I/usr/local/opencv2.4.11/include/opencv -I/usr/local/opencv2.4.11/include
y@y-workstation:~$ pkg-config --cflags opencv2
-I/usr/local/opencv2.4.11/include/opencv -I/usr/local/opencv2.4.11/include

Ubuntu下多个版本OpenCV管理(Multiple Opencv version)

pkg-config

https://www.cnblogs.com/rainsoul/p/10567390.html

https://www.cnblogs.com/sddai/p/10266624.html

pkg-config是一个linux下的命令,用于获得某一个库/模块的所有编译相关的信息。

例子:

pkg-config opencv –libs –cflags

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的信息从哪里来?

很简单,有2种路径:
第一种:取系统的/usr/lib下的所有*.pc文件。
第二种:PKG_CONFIG_PATH环境变量所指向的路径下的所有*.pc文件。

这些pc文件什么时候有的?都是在你安装某个库/模块的时候,添加的。比如你往系统安装opencv时,就会在/usr/lib/目录下,放一个opencv.pc。

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。

​ 比如简单的:

  1. Name: opencv
  2. Description:OpenCV pc file
  3. Version: 2.4
  4. Cflags:-I/usr/local/include
  5. Libs:-L/usr/local/lib –lxxx –lxxx

​ 其中Name对应的内容要和这个pc文件的文件名一致。当然为了书写方便还会加入一些变量,比如前缀变量prefix。下面有一个更完整的pc文件的内容

​ 其中,Cflags和Libs的写法,是使用了-I -L -l这些gcc的编译选项。

多版本opencv管理 --pkg-config相关推荐

  1. C++版本OpenCv教程

    C++版本OpenCv教程(一)Mat-基本的图像容器 目标 我们有多种方法从现实世界获取数字图像:数码相机.扫描仪.计算机断层扫描和磁共振成像等等.在以上任何情况下,我们(人类)看到的都是图像.然而 ...

  2. 多版本软件管理工具update-alternatives

    update-alternatives是一款通过软链接实现的非常方便地软件版本管理工具,可以很方便的对gcc,g++,python等进行管理,其基本用法如下: update-alternatives ...

  3. ubuntu下如何安装两个版本OpenCV?

    本文首发于微信公众号「3D视觉工坊」--ubuntu下如何安装两个版本OpenCV? 前言 由于在VSLAM技术研究过程中,经常会涉及OpenCV不同版本在ubuntu系统下的安装.因此小凡在此简单总 ...

  4. 版本分支管理标准 - Trunk Based Development 主干开发模型

    之前分享过<版本分支管理标准 - Git Flow>,不过在实际使用过程中, 因为其有一定的复杂度,使用起来较为繁琐,所以一些人员较少的团队并不会使用这个方案. 在这基础上,一些新的分支管 ...

  5. 多版本opencv 兼容

    https://blog.csdn.net/learning_tortosie/article/details/80594399 多版本OpenCV共存 假设我们已经安装好一版OpenCV,一般都安装 ...

  6. (79)FPGA版本如何管理?

    1.1 FPGA版本如何管理? 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA版本如何管理: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至千 ...

  7. ubuntu 安装使用多版本opencv

    ubuntu 16.04 安装了ROS kinetic,而ROS自带的是opencv3.1.之前很多程序都是opencv2,所以决定再装一个opencv2. ##安装opencv2到指定路径 1.下载 ...

  8. ubuntu18.04多版本opencv

    目录 多版本opencv安装 安装相关依赖 下载opencv3.4.1 创建编译文件夹 设置编译选项 编译安装 安装 opencv_contrib扩展(可选择) 下载与之前版本对应的opencv_co ...

  9. 【OpenCV自学笔记】DYA3 测试旧版本OpenCV函数的使用和图像简单缩放

    版权声明:本文为 @iCurious 的原创文章,可以转载,但请务必注明作者和出处!!! 原文链接:|blog.csdn.net/icurious|www.blankspace.cn|www.cnbl ...

最新文章

  1. 值得收藏的45个Python优质资源(附链接)
  2. spring启动加载流程
  3. VC++ 鼠标添加到状态栏
  4. Android自定义滑动进度条,Android自定义View实现圆形水波进度条
  5. python socket 游戏_python socket模拟游戏开服
  6. IntelliJ Idea 常用快捷键 超实用!
  7. 了解 Diffing 算法
  8. HTML中可伸缩容器怎么设置,CSS布局神器——伸缩盒(语法篇)
  9. oracle日期加一天的函数,关于oracle日期函数的介绍和使用
  10. Bandizip如何加密档案内文件名(让别人无法预览)
  11. python绘制正态分布图_在python中画正态分布图像的实例
  12. win7下安装python库的若干问题
  13. 1.19.10.Flink SQL工程案例\Flink批式处理\自定义函数\Window窗口计算\将DataSet数据转成Table数据\将Table数据转成DataSet等
  14. Luogu P4484 [BJWC2018]最长上升子序列
  15. linux 构建ios_如何使用SlackTextViewController构建iOS聊天应用
  16. Topaz DeNoise AI for Mac(AI智能图像降噪工具)
  17. 算法题(2)力扣第n位数字
  18. 关于Navicat连接mysql数据库报host XXXXXXX is not allowed to connect to this mysql server
  19. Linux系统:SSH无密登录配置
  20. kali虚拟机自带burp抓包物理机

热门文章

  1. 时间戳转换(Timestamp)
  2. aardio - 阴影渐变文字
  3. Proxmox VE 7.0升级到Proxmox VE 7.1虚拟机重启失败
  4. 加密算法之MD5与SAH-1
  5. java套打pdf做模版itext填数据
  6. 计算机软件服务费摊销期限,​软件服务费需要长期待摊吗
  7. excel怎样把一列中有相同的数据编同一个序号,不同商品的序号要递增
  8. google play service lib 最新android版本库下载地址
  9. c# 关键字:using
  10. 民宿预订小程序开发方案