当前位置:   article > 正文

Linux如何交叉编译opencv(开发板RK)_linux 交叉编译opencv

linux 交叉编译opencv

只是简单的记录一下整个编译的过程,怕以后忘记或者再去其他地方寻找比较麻烦,作为一个还没有入门的硬件选手,不知道有没有像我一样不懂交叉编译是什么意思的,

交叉编译:应该是大家如果在window使用虚拟机(Vmware)下载的Ubuntu系统,该系统的架构是intel的,但是也有ARM架构的,通俗一点的说的话:就是CPU不同(不知道说的对不对),大家也可以查一下自己linux系统是什么架构的:直接在终端输入:arch

arch

我的虚拟机显示的是:intel的64位

但是在rk1808开发板的是:aarch,也就是ARM的64位

但是这里再多说一句:大家可能会偶尔发现有armel和armhf的软件包,

一.linux命令行编译opencv

大家看到这里可能是遇到一些问题,所以大家先删除之前的opencv要不然会影响后面的编译,可以运行下面的命令查看一下:

  1. #到自己的根目录
  2. cd /
  3. #输入以下查找命令
  4. find ./ -name "opencv*"
  5. #输入下面的命令看一看是否有安装过
  6. pkg-config opencv --libs
  7. pkg-config opencv --modversion

如下:

 说明我之前下载过,大家进入自己之前安装的opencv目录下面进入build目录执行如下:

  1. sudo make uninstall
  2. cd ..
  3. sudo rm -r build

如果大家实在想不起来,直接去手动删除关于libopencv*,include/opencv等文件,主要是usr/local/lib文件夹下面的和usr/local/bin文件夹关于opencv的文件,再次运行:

  1. #这两个命令是大家在编译过程中生成的,在usr/local/lib/pkgconfig文件夹,
  2. #下面有一个opencv.pc文件
  3. pkg-config opencv --libs
  4. pkg-config opencv --modversion
  5. #打开之后如下:
  6. # Package Information for pkg-config
  7. prefix=/usr/local
  8. exec_prefix=${prefix}
  9. libdir=${exec_prefix}/lib
  10. includedir_old=${prefix}/include/opencv
  11. includedir_new=${prefix}/include
  12. Name: OpenCV
  13. Description: Open Source Computer Vision Library
  14. Version: 3.4.1
  15. Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
  16. Libs.private: -ldl -lm -lpthread -lrt
  17. Cflags: -I${includedir_old} -I${includedir_new}

prefix就是下载的东西到什么位置,

下载官方源码:Releases - OpenCV,我这里下载的是3.4.1版本;点击source下载。

 解压文件:

  1. #安装UNZIP
  2. sudo apt install unzip
  3. #使用命令进行解压
  4. unzip file.zip
  5. #或者使用双击解压包进行提取

解压进入目录:

 安装依赖库:

  1. sudo apt-get install build-essential
  2. sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
  3. sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

如果是在PC机上可能比较顺利,libjasper-dev这个库可能会出现无法定位,解决如下:

  1. sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
  2. sudo apt update
  3. sudo apt install libjasper1 libjasper-dev

OK,现在应该是可以编译了:

  1. #创建目录
  2. mkdir build
  3. cd build
  4. #进入build目录启动终端
  5. cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
  6. 将opencv下载到、usr/local里面,编译器应该是使用默认的编译器g++
  7. sudo make -j16 #启用多线程
  8. #完成之后进行
  9. sudo make install

环境配置:

修改 opencv.conf 文件

sudo gedit /etc/ld.so.conf.d/opencv.conf

添加 opencv 库的安装路径:/usr/local/lib,保存并退出。

保存后执行如下命令使得配置路径生效。

sudo ldconfig

配置 bash ,修改 bash.bashrc 文件:

sudo gedit /etc/bash.bashrc

打开文件后在文末加入以下两行代码

  1. PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
  2. export PKG_CONFIG_PATH

保存后退出,然后执行以下命令使配置生效。

source /etc/bash.bashrc

到目前为止可以运行下面代码看输出:

pkg-config opencv --libs

pkg-config opencv --modversion

大家可以自行创建显示图片代码进行测试:并且编译;

  1. g++ te.cpp -o te `pkg-config --cflags --libs opencv`
  2. #选择编译器 源文件 -o 输出文件名

让后./文件名运行;

二.如何交叉编译移植到开发板

 开发板中的CPU往往跟PC端的不同,大家可以在开发板中的SDK包中找到自己的编译器,不知道为什么使用PC端下载的编译器无法编译通过,只能通过SDK包的编译器,

 上面是开发板的SDK包中的编译器,

OK,进入opencv的源码目录,

 cd platforms/linux/,打开aarch64-gnu文件,

 大家可以看到我的编译器目录是写的我的SDK包中的编译器,需要的是下面的文件:

 大家在这里也可以使用通过PC端下载的交叉编译器文件,在。usr/bin/目录里面;

保存退出即可。新建build进入build目录;

  1. cmake .. \
  2. -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
  3. -D CMAKE_INSTALL_PREFIX=../install\
  4. -D CMAKE_SYSTEM_NAME=Linux \
  5. -D CMAKE_SYSTEM_VERSION=1 \
  6. -D CMAKE_SYSTEM_PROCESSOR=aarch64 \
  7. -D CMAKE_C_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-gcc \
  8. -D CMAKE_CXX_COMPILER=$cross_compile_toolchain/bin/aarch64-linux-gnu-g++

make -j16

sudo make install 

最终生成的文件会保存在install里面。

大家如果使用自己交叉编译的opencv在PC端进行编译,需要替换原来SDK包中的lib文件夹下面的opencv,进行编译最后推送到板子中,在开发板中,将上面的四个目录替换原来opencv对应的位置,但是要先确保开发板中的已卸载干净。并且要修改对应的pkgconfig里面的内容。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号