linux下编译安装opencv生成opencv.pc

linux下编译opencv需要cmake,有两种方式,cmake与cmake-gui,这个网上教程很多,但是opencv4版本之后,默认配置是不生成opencv.pc,就导致我们使用起来很困难,所以我们cmake的时候可以先配置一下: 

 

  cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
  cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
  cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O
  cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

                                                           

注意一行一行的来,这里其他不配置都无所谓,但是     -D OPENCV_GENERATE_PKGCONFIG=ON这个配置一定要加上,Linux下我们使用opencv,需要使用pkg-config来进行环境变量的管理,这个软件需要.pc类型的文件作为软件配置信息,如果我们不配置,会出现opencv安装成功但是c编程无法使用的情况,Python好像可以直接使用。。,网上有部分教程说可以手写,但是其实很困难,因为库之间是有依赖关系的,所以如果顺序放错也会找不到,最好还是自动生成。

linux下安装opencv4还有以下几个坑:

1.pkg-config配置不全,找不到头文件和库路径

2.系统自带的有opencv2,版本冲突

3.安装成功后没有更新动态库

4.安装配置都成功后,编译示例时没有启用c++11

 

下附安装步骤;

1.首先安装cmake,用来编译opencv

apt-get install cmake

apt-get install build-essential libgtk2.0-dev libavcodec-dev

apt-get install libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

Ubuntu下是这样,我的系统自带的有3.9版本的,centos下同样自带的有,不过版本可能是2,opencv4需要3以上的版本,需要更新一下

安装成功后输入

cmake -version

检查cmake是否安装成功

 

2.接下来安装pkg-config,用来配置环境变量。

apt-get install pkg-config

一般系统都自带的有,可以输入

pkg-config --version

查看pkg-config版本

3.下载opencv,我的版本是4.3.0

将源码包解压,官网上下下来的是zip压缩的

unzip opencv-4.3.0.zip

解压成功后当前目录下有一个opencv-4.3.0 的文件夹,注意控制一下目录,这里解压的目录只是用来编译的目录,清晰易找即可,我的就是在桌面上。

进到opencv-4.3.0中,新建一个目录build

mkdir build

这是由于cmake的语法决定的,cmake需要CMakeLists.txt的文件,然后根据这个文件生成Makefile文件来实现跨平台,具体的cmake语法感兴趣的可以去学习一下

我们进入build目录

cd build

然后使用cmake命令进行配置

  cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON  -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF  -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

这条命令会在build目录里生成对应配置的Makefile文件,可以看到配置信息之间是通过空格和-D来分割和标示的,配置了很多信息,我觉得比较重要的一个是 -D OPENCV_GENERATE_PKGCONFIG=ON,生成opencv.pc文件的配置(注意,opencv4生成的文件叫做opencv4.pc),另外就是 CMAKE_INSTALL_PREFIX=/usr/local这个关于安装路径的配置,这里的安装路径是在/usr/local下,这也是opencv的默认配置。

千万注意,最后的两个..千万不要删,这个指向CMakeLists.txt所在的目录

此时当前目录仍是build,直接编译安装即可

make install

这里需要sudo权限,也有的同学喜欢先make,在make install ,均可,先make的话可以使用make -j8指定多线程编译,会更快

安装成功后会刷出很多信息,仔细看会发现都是说×××库被安装在×××目录下的,我们这里说明一下:

因为我们指定了安装路径,所以我们的头文件被放在/usr/local/include/opencv4/opencv2/目录下,我们的库文件被放在/usr/local/lib/目录下,可以进去查看一下这些文件是否是否存在。

接下来可以输入

opencv_version

来判定安装成功的opencv版本号,当出现你安装的opencv版本号时,就安装成功了。

4.opencv是一个第三方的库,我们要引用它需要对系统的环境变量进行配置。

vim /etc/ld.so.conf.d/opencv.conf

在文件末尾添加:/usr/local/lib

如果这是我们第一次安装opencv,这个文件可能是个空文件,这里的/usr/local/lib就是我们安装opencv时安装的那些库的目录

将这个文件保存然后

sudo ldconfig

即可。

下为原理分析,不感兴趣的同学可以直接跳到第五步。

如果我们

ls /etc/ | grep ld

会发现在etc下存在这三个文件:

ld.so.cache
ld.so.conf
ld.so.conf.d

其中ld.so.conf.d是目录类型的文件,他的下面存放这各种.conf文件,我们刚才写的opencv.conf就在这个目录下

ld.so.conf是普通文件类型的文件,打开ld.so.conf会发现里面写着这么一句:

 include /etc/ld.so.conf.d/*.conf  

这代表引用ld.so.conf.d目录下的所有.conf文件

这样的话,当操作系统加载动态库时,会首先去读取ld.so.conf文件,然后进入ld.so.conf.d目录下,读取里面所有的配置文件,这些配置文件内记载着库的路径,这样就可以找到动态库了

但是Linux还有一个缓存机制,为了防止在目录下一层层的找库,Linux会建立一个缓存文件,ld.so.cache,这实际上是一个二进制文件,

 cat /etc//ld.so.cache 

通过这个命令,可以看到里面存储着库的目录,这样一来每当Linux要找库时,就会直接读取ld.so.cache文件,而当我们新增加了库时也要使用

sudo ldconfig

来进行更新

5.接下来要为我们编写c++程序配置环境变量,我们知道一个c文件编译时首先会预处理,将头文件转换为对应的代码,所以第一步会先去找c文件里引用的头文件,然后生成中间文件,中间文件会去找它依赖的库,然后生成可执行文件,这是第二步,我们需要配置的环境变量主要就是这两个方面。

我们这里使用2步骤时安装成功的pkg-config来进行配置

首先在终端输入

vim /etc/bash.bashrc

然后在文本末尾处添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

export PKG_CONFIG_PATH

这里是为pkg-config设置系统环境变量,当pkg-config运行时,他会在他的配置目录下查找.pc文件,找到对应的文件就读取它,pkg-config的默认路径是: /usr/lib/pkgconfig/和/usr/share/pkgconfig/,这里我们新给他添加了一个路径/usr/local/lib/pkgconfig。

然后

 source /etc/bash.bashrc 

更新一下系统的环境变量

接下来在/usr/local/lib/目录下建立pkgconfig目录,然后将build文件夹下编译生成的opencv4.pc 拷贝进/usr/local/lib/pkgconfig

(可以通过命令行查找opencv4.pc:)

find ./ -name opencv4.pc

然后

 pkg-config --cflags opencv4

测试是否配置好环境变量

这里记住两个值: pkg-config --cflags 代表我们安装的头文件路径, pkg-config --libs opencv4代表我们安装的库文件路径

 

6.环境变量配置好后,进到我们解压opencv包的目录,里面有一个samples文件夹,这个里面全是各种语言的测试

cd opencv-4.3.0/samples/cpp/

进到cpp目录下测试c++使用opencv,随便找一个.cpp文件进行编译

例如:

g++ -o edge edge.cpp `pkg-config --cflags --libs opencv4`

注意这里的两个``是键盘左上方的符号,不是单引号,这代表shell的运行语句

编译成功就代表你的opencv可以使用啦!!!

7.这里谈两个问题,第一个是opencv版本冲突的问题,因为linux自带的opencv是2版本的,所以会出现一些函数未声明的错误

,直接将2版本的卸载就行了。

sudo apt-get autoremove libopencv-dev

我直接用了这个命令,反正如果卸多了再重新装缺失的包就行了

centos下可以先查找opencv相关的包,因为我们编译安装的是不会在包管理器中的,所以出现的一定是系统自带的包

yum list installed *opencv*

然后把出现的包卸载就行了

第二个问题是opencv需要c++11支持的问题,报错中会有体现,如果有同学的编译信息过多不好直接找报错,可以

g++ -o egde egde.cpp `pkg-config --cflags --libs opencv4` 2> error

这样当前目录下会出现一个error的文件,vim打开再分析就可以

如果是c++11的问题,直接在编译命令后加上-std=c++11,或者将g++更新到最新版本即可

  • 71
    点赞
  • 239
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值