1. 程式人生 > >嵌入式開發之Opencv(一)交叉編譯

嵌入式開發之Opencv(一)交叉編譯

參考文件

本文件涉及到的目標硬體為全志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按鈕彈出工具鏈配置介面

這裡寫圖片描述

選擇Specify options for cross-compiling,進入交叉編譯鏈設定介面

這裡寫圖片描述

點選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