Ubuntu OpenCV 自定义环境变量 pkg-config / PKGCONFIGPATH

Ubuntu OpenCV 自定义环境变量 pkg-config / PKGCONFIGPATH

 

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}

复制代码

  

1.用gedit打开/etc/ld.so.conf
 终端输入: sudo gedit /etc/ld.so.conf
 文件末行加入:include /usr/loacal/lib 

2.然后终端执行指令:
   sudo ldconfig

3.接着修改bash.bashrc文件 ,终端输入:
   sudo gedit /etc/bash.bashrc 
   文件末行加入:  
          PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
          export PKG_CONFIG_PATH 

4.最后source一下,让更改立即生效,终端输入:

     source /etc/bash.bashrc  

5.如果没有正确配置opencv库的环境变量,在编译运行opencv程序时,会出现类似这种的错误提示:
error while loading shared libraries: libopencv_ccalib.so.3.2: cannot open shared object file: No such file or directory

6.如何终端编译opencv程序:
 
   终端输入: g++ 1.cpp -o 1 `pkg-config --cflags --libs opencv`

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

echo $PKG_CONFIG_PATH

  通过 pkg-config 查看 opencv 版本

pkg-config --modversion opencv
$ pkg-config --cflags opencv
$pkg-config --libs opencv

你可能感兴趣的:(工具安装,实用技巧及工具,opencv,ubuntu)