Opencv移植到ARM

       最近接触到一个项目扫描二维码,所以接触到opencv库与zbar,需要编译安装opencv库,所以写这篇博客,当做是一个学习的过程与记录。如果将来还需要用到也可以继续翻一翻。

       这里用到的opencv版本是3.2.0,下载网站在这里:https://www.opencv.org/releases.html

       交叉编译工具:arm-linux-gcc-4.4.3

       系统:Ubuntu16.04

       各种编译之前的依赖库和交叉编译工具可以在这里下载:https://download.csdn.net/download/kaychangeek/10120278

     开始移植:

   (1)安装交叉编译器:

         把交叉编译压缩包放到桌面,进行解压安装:

         sudo tar -zxvf arm-linux-gcc-4.4.3.tar.gz

         然后检测是否安装成功,进入到交叉编译器的bin目录下,输入命令行:

         sudo ./arm-none-linux-gnueabi-gcc -v

         这个时候可能会报错:说找不到arm-none-linux-gnueabi-gcc,但是通过目录查看:如下图:

 

          Opencv移植到ARM_第1张图片

        发现其其实是存在的。

      原因是:交叉编译工具是32位,但是系统是64位,系统不兼容。

         所以在命令行敲入:apt-get install libc6-i386  即可解决。

         然后添加编译器地址到系统环境变量:

         vim /etc/profile

         然后在最后一行添加:export PATH=$PATH:/home/chris/Desktop/opt/FriendlyARM/toolschain/4.4.3/bin

         保存退出然后 source /etc/profile

         然后输入 echo $PATH 看看有没有刚刚输入的路径输出,如果有就是成功的,即可以在任意的目录下输入命令行:

         arm-none-linux-gnueabi-gcc -v

         如果输出如图,则交叉编译器安装成功:

              Opencv移植到ARM_第2张图片

       (2)编译安装第三方依赖库

             首先,先解压opencv的源码,在opencv源码下创建目录 output 跟 build。

             cd opencv-3.2.0

             mkdir build output

             接着编译安装第三方依赖库:

           说明:由于opencv的编译安装依赖很大第三方库源,所以需要先对这些第三方库进行交叉编译然后才能编译安装opencv,这些第三方依赖库在打包的文件夹里面一并提供,接着编译安装第三方依赖库;

           将这些库拷贝到一个路径下,对他们一一的进行解压缩,解压缩后如下图所示:(注:解压.tart.gz使用命令tar -zxvf xxx.tar.gz,解压.tar.bz2使用命令tar -jxvf xxx.tar.bz2,解压.tar.xz先用xz -d xxx.tar.xz,这时候会输出对应的.tar文件,再用tar -xvf xxx.tar解压即可。) 解压完成后,继续在/etc/profile下面最后一行添加:

             export OPENCV_3THPARTY_LIB=/home/chris/Desktop/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/

             这是为了将编译出来的第三方依赖库安装在此目录下。

             然后source该文件,验证是否添加成功,输入:echo $OPENCV_3THPARTY_LIB 。

       1.交叉编译Libz库

            cd zlib-1.2.8

            CC=arm-linux-gcc ./configure --prefix=$OPENCV_3THPARTY_LIB --shared

            出现以下错误:

             

            解决:

                 在configure 删除以下字段,避免将warn处理为error :

                 echo "Checking for obsessive-compulsive compiler options..." >> configure.log

                 if try $CC -c $CFLAGS $test.c; then
                 :
                 else
                 echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
                 leave 1
                 fi

            重新CC=arm-linux-gcc ./configure --prefix=$OPENCV_3THPARTY_LIB --shared

            然后打开Makefile,vim Makefile,然后将AR=ar改成AR=arm-linux-ar,RANLIB改成arm-linux-ranlib。

            make

            然后发现继续出现以下错误:

               Opencv移植到ARM_第3张图片

           解决:apt-get install lib32z1

           然后继续 make   make install

      2.交叉编译Libjpeg库

           cd jpeg-9b

           ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared

           make  make install

      3.交叉编译Libpng库

            cd libpng-1.6.32

             ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --enable-static

            make   make install

      4.交叉编译yasm库

            cd yasm-1.3.0

            CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm

            make    make install

      5.交叉编译Libx264库

             cd x264-snapshot-20171114-2245

            CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm

            make      make install

      6.交叉编译Libxvid库

            cd xvidcore-1.3.3

            cd build/generic

            ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --disable-assembly

      7.交叉编译Ffmpeg

            cd ffmpeg-3.4

        ./configure --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale --extra-ldflags=-L$OPENCV_3THPARTY_LIB/lib --extra-cflags=-I$OPENCV_3THPARTY_LIB/include

             make    make install

              到此,opencv依赖的第三方库交叉编译完成。

   (3)编译安装opencv源码

              首先安装Cmake

              sudo apt-get install cmake cmake-qt-gui

              运行Cmake程序:在opencv下build目录下输入命令:cmake-gui    得到如图所示:

              Opencv移植到ARM_第4张图片

              在Where is the source code选择源码目录

              Where to build the binaries选择源码目录下的build目录

              然后点击Configure。

              得到:

              Opencv移植到ARM_第5张图片

              选择第四个,得到:

               Opencv移植到ARM_第6张图片

             然后按照图这样填:

  Opencv移植到ARM_第7张图片

         然后去掉一些不需要编译的模块,在search下搜索WITH_TIFF,WITH_GTK,去掉勾选,搜索CMAKE_BUILD_TYPE,把值改为Release,搜索CMAKE_INSTALL_PREFIX,将这个值改为目录output路径。然后如果想要编译静态库可以搜索BUILD_SHARED_LIBS,去掉勾选。如图:

                                 Opencv移植到ARM_第8张图片

                                 Opencv移植到ARM_第9张图片

     然后点击Generate生成Makefile,如果成功可以看到下面会有一个:

                             

    然后关掉Cmake,进入opencv下的build目录,打开CMakeCache.txt,找到CMAKE_EXE_LINKER_FLAGS这一行,在其后面加上  -lpthread -lrt -ldl   (链接属性),进行make:

      然后发现报错:

      Opencv移植到ARM_第10张图片

解决:打开该文件定位到错误行,将abs改成fabs,再进行make。完成之后进行 make install:

      编译成功后进入到output的lib目录下,可以看到:

      Opencv移植到ARM_第11张图片

       表示编译成功。接下来就可以编译可执行文件到arm板上运行啦。下面不再展示赘述:可以参考下面的博主文章:

       链接:https://blog.csdn.net/KayChanGEEK/article/details/78552418

你可能感兴趣的:(Opencv移植到ARM)