欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

嵌入式开发之Opencv(一)交叉编译

程序员文章站 2022-07-12 09:43:35
...

参考文档

本文档涉及到的目标硬件为全志H8(8核Cortex-A7,Armv7架构),但是对其他Arm芯片也有一定的借鉴意义,只需要更换交叉编译链即可。

开发环境介绍

  • 主机操作系统:Ubuntu14.04 64位
  • 目标平台:BoxV3 全志H8
  • 交叉工具链:arm-linux-gnueabihf,gcc4.8.5
  • opencv版本:3.2.0
  • 编译时间:2018.7.25

设置本地编译链和交叉编译链

# 在/etc/bash.bashrc的最后增加如下指令
# Native Compiler
export AR_host="ar"
export CC_host="gcc"
export CXX_host="g++"
export LINK_host="g++"

# Allwinner H8 BoxV3 cross compiler, Qt 5.8.0 SDK
export ARCH=arm
export PATH=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/:$PATH
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export CC=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-gcc    
export CXX=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-g++    
export LD=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-ld
export AR=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-ar
export AS=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-as
export RANLIB=/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-ranlib
# 修改完成之后需要重启命令行才能生效
# 你可以通过如下指令来确认交叉编译链是否已经设置好
echo $CC 
# 当显示/home/root/CQA83TLinux_Qt5.8.0_bv3/buildroot-2017.02.3/output/host/usr/bin/arm-buildroot-linux-gnueabihf-gcc时表示交叉编译链
# 已经设置好
# 当需要更换为本机编译时屏蔽上面的指令即可

新建cmake Build目录

cd opencv-3.2.0
mkdir _build

修改CMakeLists.txt

# 强制打开NEON开关
# OCV_OPTION(ENABLE_NEON "Enable NEON instructions" "${NEON}" IF CMAKE_COMPILER_IS_GNUCXX AND (ARM OR AARCH64 OR IOS) )
OCV_OPTION(ENABLE_NEON   "Enable NEON instructions"           ON )

修改cmake/OpenCVCompilerOptions.cmake

if(ENABLE_NEON)
    add_extra_compiler_option("-mcpu=cortex-a7 -mfpu=neon")

使用cmake-gui进行配置

点击Configure按钮弹出工具链配置界面

嵌入式开发之Opencv(一)交叉编译

选择Specify options for cross-compiling,进入交叉编译链设置界面

嵌入式开发之Opencv(一)交叉编译

点击Configure生成配置选项,并且打开Advancd选项

# 去掉勾选为FLASE 勾选为TRUE
BUILD_SHARED_LIBS                 # FLASE为编译静态库 TRUE为编译动态库
CMAKE_BUILD_TYPE                  # Release
CMAKE_CXX_FLAGS                   # -fPIC
CMAKE_C_FLAGS                     # -fPIC
CMAKE_EXE_LINKER_FLAGS            # -lrt -lpthread    
CMAKE_INSTALL_PREFIX              # 自定义安装目录
WITH_CUDA                         # FLASE 禁用CUDA
WITH_CUFFT                        # FLASE 禁用CUFFT
WITH_EIGEN                        # FLASE 禁用EIGEN
WITH_FFMPEG                       # FLASE 禁用FFMPEG
WITH_OPENCL                       # FLASE 禁用OPENCL
WITH_OPENCLAMDBLAS                # FLASE 禁用OPENCLAMDBLAS
WITH_OPENCLAMDFFT                 # FLASE 禁用OPENCLAMDFFT
WITH_OPENCL_SVM                   # FLASE 禁用OPENCL_SVM

# 可选配置(根据需要进行配置,建议全部去掉勾选)
WITH_TIFF
WITH_1394
WITH_GSTREAMER
WITH_JASPER      
WITH_LAPACK
WITH_MATLAB
WITH_WEBP

# Opencv编译模块配置
# 为节省编译时间和库体积建议去掉不需要编译的模块,在本文档中只开启了下面几个模块,可以根据具体需要添加
BUILD_opencv_core           # TRUE
BUILD_opencv_imgcodecs      # TRUE
BUILD_opencv_imgproc        # TRUE

点击Generate生成Makefile

进入_build目录&编译

cd _install
make -j8 
make install