0. 前言

今天在执行一段脚本的时候,爆出错误:

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable

意思是在 PKG_CONFIG_PATH 环境变量中没有找到 opencv 的配置文件 ‘opencv.pc’,即 opencv 不在 pkg-config 的搜索路径,那什么是 pkg-config?什么是 PKG_CONFIG_PATH?

1. pkg-config

  一般我们写的程序都是要依赖一些库,如 opencv,但库的安装位置可能不同,这时就需要一个工具能够管理并能搜索这些库的路径(头文件路径 /include,库文件路径 /lib)。

  pkg-config 就是通过库提供的一个 .pc 文件获得库的各种必要信息的,包括版本信息、编译和连接需要的参数等。通过 pkg-config 提供的参数(–cflags, –libs),将所需信息提取出来供编译和连接使用。这样,不管库文件安装在哪,通过库对应的.pc文件就可以准确定位,。

  它提供的主要功能有:

  <1> 检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。
  <2> 获得编译预处理参数,如宏定义,头文件的路径。
  <3> 获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。
  <4> 自动加入所依赖的其他库的设置。

2. PKG_CONFIG_PATH

  pkg-config 默认会搜索 /usr/lib/pkgconfig /usr/share/pkgconfig下的 .pc 配置文件,若我们源码编译的库的路径不在 pkg-config 的搜索路径下,则可以通过环境变量 PKG_CONFIG_PATH 将自定义的路径添加到 pkg-config 的搜索路径。

export PKG_CONFIG_PATH=/your/path:$PKG_CONFIG_PATH

3. 举例:opencv库

  我们有时候需要源码编译高版本的 opencv 库,但又不想安装到默认路径下,这样可能可能会覆盖默认安装的 opencv,则需要将自定义安装路径。默认的 CMAKE_INSTALL_PREFIX 为 /usr/local,通过以下参数来自定义安装路径。

cmake -D CMAKE_INSTALL_PREFIX=~/local ..

  安装完成后,在 ~/local 路径中并没有找到 opencv.pc,我们可以手动创建

cd ~/local/lib
sudo mkdir pkgconfig && cd pkgconfig
sudo vim opencv.pc
prefix=~/local
exec_prefix=${prefix}
includedir=~/local/include
libdir=~/local/lib Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.1.0
Libs: -L${exec_prefix}/lib -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dpm -lopencv_face -lopencv_photo -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_optflow -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_xfeatures2d -lopencv_shape -lopencv_video -lopencv_ml -lopencv_ximgproc -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_flann -lopencv_xobjdetect -lopencv_imgcodecs -lopencv_objdetect -lopencv_xphoto -lopencv_imgproc -lopencv_core
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir}

  在 ~/.bashrc 中添加环境变量

export PKG_CONFIG_PATH=~/local/lib/pkgconfig:$PKG_CONFIG_PATH

  通过下面命令来查看已添加的环境变量:

echo $PKG_CONFIG_PATH

  通过 pkg-config 查看 opencv 版本

pkg-config --modversion opencv

  终端进入安装opencv 的 python (我是用系统自带的 python3.5),查看 opencv 的版本

import cv2
cv2.__version__

Ubuntu 16.04 + OpenCV 自定义环境变量 pkg-config / PKG_CONFIG_PATH的更多相关文章

  1. Ubuntu 16.04 搭建KVM环境

      在Ubuntu 16.04下搭建KVM环境过程记录. 1 查看CPU是否支持KVM egrep "(svm|vmx)" /proc/cpuinfo 有结果输出,如下图: 2 安 ...

  2. Ubuntu 16.04.4 LTS环境中php7.0使用mysqli失败,数据库无法访问

    环境: Ubuntu 16.04.4 LTS php7.0 输入命令php -m,显示如下,发现没有mysqli模块 输入命令sudo apt install php-mysql,安装mysql模块, ...

  3. VMware 15安装Ubuntu 16.04并配置环境

    VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统,它能在Windows系统上虚拟出多个计算机,每个虚拟计算机可以独立运行,可安装各种软件与应用等 ...

  4. Ubuntu 16.04下Java环境安装与配置

    首先下载linux下的安装包 登陆网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.h ...

  5. 配置 阿里云ECS Ubuntu 16.04 64bit 桌面环境

    1. 步骤 安装软件 修改root权限 重启 2. 详情 1. 安装软件 创建脚本文件(例如:desktopSetting.sh),并输入以下内容: #!/bin/bash #更新软件库 apt-ge ...

  6. ubuntu 16.04 安装 opencv +contrib (3.2.0) + python 3.5

    环境: - ubuntu 16.04 - OpenCV + contrib 3.2.0 (文中附下载链接) - Python 3.5 基于其他环境的配置应该大同小异. 没时间解释了,直接上车. 更新下 ...

  7. ubuntu 16.04源码编译OpenCV教程 | compile opencv on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/15f5c3e8/,欢迎阅读! compile opencv on ubuntu 16.04 Series Part 1: comp ...

  8. Ubuntu 16.04安装JDK/JRE并配置环境变量

    作为一个Linux新手,在写这篇文章之前,安装了几次jdk,好多次都是环境变量配置错误,导致无法登录系统.经过几天的研究,今天新装系统,从头来完整配置一遍 系统版本:Ubuntu 16.04 JDK版 ...

  9. Ubuntu 16.04 root环境变量不生效问题解决方案

    在Ubuntu 16.04中配置JDK环境变量,但是在切换到root时不生效 . 在/etc/profile中添加如下: export JAVA_HOME=/opt/java/jdk1..0_151 ...

随机推荐

  1. php精确计算

    php BC高精确度函数库 结果: php一般的取余 只是除以整数 bc精度取余 精确到了小数

  2. SpringMVC方法的返回值类型和自动装配

    1. void类型作为返回值类型 /** * 如果方法写成了void就跟原来servlet含义是差不多 的 * json */ @RequestMapping("/firstRequest& ...

  3. mysql中的replace

    replace字面意思是替换,在mysql里面的运用是 如下图所示 1.  replace into test values(6, 'wowowo', 'new', 'japan') 这条语句则他会正 ...

  4. 写出这个数-PTA

    读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方. ​​ 输出格式: ...

  5. Spring Cloud Gateway-自定义异常处理

    前提 我们平时在用SpringMVC的时候,只要是经过DispatcherServlet处理的请求,可以通过@ControllerAdvice和@ExceptionHandler自定义不同类型异常的处 ...

  6. Python笔记:设计模式之代理模式

    代理通常就是一个介于寻求方和提供方之间的中介系统.其核心思想就是客户端(寻求方)没有直接和提供方(真实对象)打交道,而是通过代理对象来完成提供方提供的资源或操作. 代理其实就是封装实际服务对象的包装器 ...

  7. 漫谈golang设计模式 工厂模式

    工厂模式 意义:创建过程交给专门的工厂子类去完成.定义一个抽象的工厂类,再定义具体的工厂类来生成子类等,它们实现在抽象按钮工厂类中定义的方法.这种抽象化的结果使这种结构可以在不修改具体工厂类的情况下引 ...

  8. Json互相序列化对象

    using System.ServiceModel; using System.ServiceModel.Web; using System.Runtime.Serialization.Json; u ...

  9. plus.webview.create 使用方法

    plus.webview.create( "xxx.html", //打开页面地址 "xxx", //打开页面id值 { //窗口样式 width: '100% ...

  10. 【Android】基于A星寻路算法的简单迷宫应用

    简介 基于[漫画算法-小灰的算法之旅]上的A星寻路算法,开发的一个Demo.目前实现后退.重新载入.路径提示.地图刷新等功能.没有做太多的性能优化,算是深化对A星寻路算法的理解. 界面预览: 初始化: ...