OpenCV移植到ARM-Linux

编译平台:Ubuntu16.04LTS

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

目录 

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

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

 

详细过程:

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

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目录内容如下,则表示成功。

4.拷贝动态库到ARM板

5.测试

至此,移植完成。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值