系统环境:
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
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