交叉编译OpenCV2.4.9

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011964923/article/details/72588038

系统环境:
Ubuntu12.04 + OpenCV2.4.9 + arm-linux-gcc-4.3.2

(一)安装依赖库

运行OpenCV需要依赖一些库文件,所以在对OpenCV进行交叉编译之前,首先要安装7个依赖库。依赖关系如下:

           OpenCV     |--------zlib

                      |--------jpeg

                      |--------libpng

                                             |--------zlib

                      |--------tiff

                                             |--------zlib

                      |--------ffmpeg

                                             |--------x264

                                             |--------xvidcore

首先需要下载这7个库文件,直接百度/谷歌搜索这些库文件,进入官网下载,解压。

1)libz的交叉编译
进入zlib的解压目录:

#CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/opencv-depend --shared
#make
#make install

2)libpng的交叉编译
进入libpng的解压目录

#./configure --prefix=/usr/local/arm/opencv-depend --enable-shared --enable-static --#host=arm-linux
#make
#make install

3)libjpeg的交叉编译
进入libjpeg的解压目录:

#./configure --prefix=/usr/local/arm/opencv-depend --enable-shared –enable-static
#gedit Makefile (修改Makefile中cc =arm-linux-gcc ar=arm-linux-ar ar2=arm-linux-ranlib)
#make

make过程中会报错:

#make: ./libtool: Command not found

这是因为,缺少libtool文件。
解决方法:在上一步骤解压的libpng路径下就有libtool这个文件,将其复制一份到libjpeg路径下即可。

重新编译安装:

#make
#make install

make install的过程中又会报错:

#/usr/bin/install: cannot create regular file `/usr/local/libjpeg/bin/cjpeg': No such file or directory

这是因为不存在 /usr/local/libjpeg/bin路径,及没有bin这个文件夹。
解决方法:进入/usr/local/libjpeg/路径下,新建一个bin文件夹即可。

#cd /usr/local/libjpeg
#mkdir bin

然后,重新执行 make install,上述的“文件夹不存在错误还会出现几次”,同样地,缺少哪个文件夹,我们就过去新建哪个文件夹就可以了。大概还会缺少man/man1, include等文件夹。记得,新建文件夹后要重新 make install,直到安装成功为止。

4)yasm的交叉编译
进入yasm的解压目录:

#./configure --prefix=/usr/local/arm/opencv-depend --enable-shared --enable-static --host=arm-linux
#make
#make install

5)libx264的交叉编译
进入libx264的解压目录:

#CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux –disable-asm --prefix=/usr/local/arm/opencv-depend
#make
#make install

6)libxvid的交叉编译
进入build/generic目录:

#./configure --prefix=/usr/local/arm/opencv-depend --host=arm-linux  --disable-assembly
#make
#make install

7)ffmpeg的交叉编译
进入ffmpeg目录:

#./configure --prefix=/usr/local/arm/opencv-depend --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
#make
#make install

至此,所有的依赖库都已安装完毕,安装路径为:/usr/local/arm/opencv-depend

(二)交叉编译OpenCV2.4.9

1)下载OpenCV2.4.9
到sourceforge上下载opencv源码:OpenCV2.4.9-unix
解压缩到 /opt路径下

2)安装cmake gui

#apt-get install cmake cmake-qt-gui

3)拷贝文件
把 /usr/local/arm/opencv-depend 目录下lib和include所有的文件分别拷贝到 /usr/local/arm/4.3.2/arm-non-linux-gnueabi 下的lib和include下

4)配置交叉编译工具链

#cd opencv-2.4.9
#mkdir build
#cd build
#vi toolchain.cmake

粘贴以下配置:

###########user defined###################################
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc )
set( CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++ )
###########user defined###################################
set( CMAKE_FIND_ROOT_PATH "/usr/local/arm/opencv-depend" )
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
##########################################################

保存之后:

#cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ../
#cmake-gui

默认安装目录为 opencv-2.4.9/build/install ,改为 /usr/local/arm/opencv-install

修改编译选项:
CMAKE_INSTALL_PREFIX /usr/local/arm/opencv-install
去掉 WITH_CUDA
去掉 WITH_GTK
去掉 WITH_1394
去掉 WITH_GSTREAMER
去掉 WITH_LIBV4L (因为后面有另外一个WITH_V4L)
去掉 WITH_TIFF
去掉 BUILD_OPENEXR
去掉 WITH_OPENEXR
去掉 BUILD_opencv_ocl
去掉 WITH_OPENCL

根据自己的需要选择编译的选项,有的选项需要安装相应的依赖的库,否则编译会出错
完成后 Generate

修改 CMakeCache.txt, CMAKE_EXE_LINKER_FLAGS原来为空,加上 -lpthread -lrt

#make
#make install

(三)最后一个步骤

1)将 /usr/local/arm/opencv-install下的文件夹 opencv2 复制到 /usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/下

2)将 /usr/local/arm/opencv-depend/lib/下的所有文件 和 /usr/local/arm/opencv-install/lib/下的所有文件 都拷贝到板子上/lib目录下,OpenCV的程序即可在ARM板子上运行了。


本文的交叉编译方法参考了以下两篇博文和一个帖子的4楼,在此表示感谢!
OpenCV移植到ARM9
Opencv2.4.9交叉编译
arm-linux-gcc交叉编译opencv源程序的错误:opencv2/core/core_c.h: No such file or directory

猜你喜欢

转载自blog.csdn.net/u011964923/article/details/72588038