OpenCV移植到ARM-Linux

编译平台:Ubuntu16.04LTS

目标板:ARM A9(三星的Exynos4412)

目录 

OpenCV移植到ARM-Linux之一:交叉编译第三方依赖库

OpenCV移植到ARM-Linux之二:交叉编译opencv库

 

详细过程:

一、交叉编译第三方依赖库

1.下载所需要的第三方库源码包(可自行下载,也可在这下载)

OpenCV移植到ARM-Linux_第1张图片

添加环境变量,指定第三方依赖库安装路径

vim /etc/profile

末尾添加:

#opencv_3thparty_lib
export OPENCV_3THPARTY_LIB=/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/
 (注:该路径我选择的是交叉编译链下的子目录,编译时会自动检索到该路径,若为其它普通路径,需自行添加该路径到系统链接环境变量LD_LIBRARY_PATH中)

2.在opencv目录(我的是opencv/)创建源码包文件夹3thparty_package

cd  /home/jiangyu/opencv

mkdir 3thparty_package

3.交叉编译zlib

1)解压:

tar xvf zlib-1.2.8.tar.gz

2)编译

cd zlib-1.2.8

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

vim Makefile   将AR=ar改成AR=arm-none-linux-gnueabi-ar,RANLIB改成arm-none-linux-gnueabi-ranlib

make -j6

make install

4.交叉编译libjpeg

tar vxf jpegsrc.v9b.tar.gz 

 cd jpeg-9b/

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

make 

make install

5.交叉编译libpng

xz -d libpng-1.6.32.tar.xz

tar -xvf libpng-1.6.32.tar

cd libpng-1.6.32/

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

出现错误(原因在于libpng依赖zlib库):configure: error: ZLib not installed

解决办法(添加zlib库到临时环境变量):

export  LDFLAGS="-L/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/lib/"
export CPPFLAGS="-I/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/include/"

make

make install

6.交叉编译yasm

tar xvf yasm-1.3.0.tar.gz 

cd yasm-1.3.0/

CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-none-linux-gnueabi --prefix=$OPENCV_3THPARTY_LIB --enable-shared 

出现错误:

checking build system type... Invalid configuration ` ': machine ` ' not recognized
configure: error: /bin/bash config/config.sub   failed

解决办法:

sudo apt-get install libtool

cp /usr/share/libtool/build-aux/config.sub .

cp /usr/share/libtool/build-aux/config.guess .

make

make install

7.交叉编译libx264
tar xvf  last_x264.tar.bz2 
cd x264-snapshot-20171114-2245/

CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-none-linux-gnueabi --prefix=$OPENCV_3THPARTY_LIB --enable-shared 

make 

make install

8.交叉编译libxvid

tar xvf xvidcore_1.3.3.orig.tar.gz 
cd xvidcore-1.3.3/

cd build/generic
./configure --host=arm-none-linux-gnueabi --prefix=$OPENCV_3THPARTY_LIB  --disable-assembly

make

make install

9.交叉编译ffmpeg

tar xvf  jpegsrc.v9b.tar.gz

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-none-linux-gnueabi-gcc --enable-swscale --extra-ldflags=-L/home/jiangyu/opencv/3thparty_package/opencv_3thparty_lib/lib --extra-cflags=-I/home/jiangyu/opencv/3thparty_package/opencv_3thparty_lib/include

make

make install

至此,opencv的第三方依赖库编译完成。

二、交叉编译opencv库

1.在opencv源码目录(/.../opencv/opencv-3.2.0/)下创建两个文件夹build和output,进入build目录。

cd build

cmake-gui

如图配置:

在弹出的窗口按如下配置,点击Next。

按照如下配置,Openrating System要写成Linux,不能写成arm-linux或者其他,因为cmake不能识别系统arm-linux,你可以试一下写成其他,这样在配置好的输出信息中会提示无法识别XXX系统。Compilers选择arm-linux-gcc和arm-linux-g++的绝对路径即可,Target Root选择第三方库的路径即/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/,其他的按照如下以下配置即可。

根据个人需求修改编译模块选项:

我的配置如下:

必选项:

BUILD ZLIB

BUILD_JPEG

BUILD_PNG

BUILD_JASPER

去除项:

WITH_TIFF

WITH_GTK

WITH_CUDA

WITH_1394

WITH_GSTREAMER

WITH_OPENEXR

WITH_OPENCL

修改项:

CMAKE_BUILD_TYPE    键值改成Release

CMAKE_INSTALL_PREFIX   键值改成源码目录下的output文件夹(即opencv库安装路径)

 如下图所示: 

 

然后点击Generate生成Makefile。

到此已经生成了初步配置的Makefile,关闭cmake。

2.编译: make

报如下类似错误:

In file included from /home/dyjun/opencv/git_opencv/opencv/3rdparty/libpng/pngpriv.h:904:0,
                 from /home/dyjun/opencv/git_opencv/opencv/3rdparty/libpng/png.c:14:
/home/dyjun/opencv/git_opencv/opencv/3rdparty/libpng/pngstruct.h:30:18: fatal error: zlib.h: No such file or directory
 #include "zlib.h"
                  ^
compilation terminated.
make[2]: *** [3rdparty/libpng/CMakeFiles/libpng.dir/png.c.o] Error 1
make[1]: *** [3rdparty/libpng/CMakeFiles/libpng.dir/all] Error 2

解决办法:

找到错误模块相关的CMakeLists.txt (如3rdparty/libpng/CMakeLists.txt )
ocv_include_directories(含ZLIB_INCLUDE_DIRS) 行前面添加 :

set(ZLIB_INCLUDE_DIRS "/usr/local/arm/arm-2014.05/arm-none-linux-gnueabi/")

其它类似的错误也是如此解决。

继续make,出现错误:提示找不到pthread等系列函数

解决方案:在build目录下打开CMakeCache.txt文件,找到CMAKE_EXE_LINKER_FLAGS,在其后面加上-lpthread -lrt -ldl链接属性。

继续编译,未报错,编译成功。

3.安装:

make intall

安装完成后output目录内容如下,则表示成功。

OpenCV移植到ARM-Linux_第2张图片

4.拷贝动态库到ARM板

5.测试

至此,移植完成。

你可能感兴趣的:(嵌入式)