Yocto OpenCV交叉编译

1. 下载OpenCV4.5
    https://github.com/opencv/opencv

eg:4.0.1下载
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.0.1.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.1.zip
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.0.1 opencv
mv opencv_contrib-4.0.1 opencv_contrib

2. 解压opencv4.5.1.tar.bz2

   $ tar xvjf opencv4.5.1.tar.bz2

3. 安装yocto工具链

   $ mkdir -p opencv4.5.1/tool_chains
   $ ./oecore-x86_64-aarch64-toolchain-nodistro.0.sh -yd /worktemp/opencv4.5.1/tool_chains

4.  编译依赖环境确认 //安装


sudo apt-get update 
sudo apt-get upgrade
sudo apt-get install -y build-essential
sudo apt-get install -y cmake cmake-qt-gui
sudo apt-get install -y libgtk2.0-dev
sudo apt-get install -y pkg-config
sudo apt-get install -y python-dev python-numpy
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev

5.  配置交叉编译环境

    toolchains.cmake

#目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量
#CMAKE_CROSSCOMPILING为TRUE
#this is required
set(CMAKE_SYSTEM_NAME Linux)
 
set(USER_PATH "/worktemp/opencv4.5.1")

#代表了一系列的相关文件夹路径的根路径的变更,编译器到指定的根目录下寻找对应的系统库
set(CMAKE_SYSROOT ${USER_PATH}/tool_chains/sysroots/aarch64-poky-linux)
set(CMAKE_FIND_ROOT_PATH ${USER_PATH}/tool_chains/sysroots/aarch64-poky-linux)

#指明C和C++编译器
set(tools ${USER_PATH}/tool_chains/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux)

set(CMAKE_C_COMPILER ${tools}/aarch64-poky-linux-gcc)
set(CMAKE_CXX_COMPILER ${tools}/aarch64-poky-linux-g++)

#有些开源的库在编译时需要依赖openssl的库,指明openssl的库和头文件
set(OPENSSL_LIBRARIES ${USER_PATH}/tool_chains/sysroots/aarch64-poky-linux/usr/lib64)
set(OPENSSL_INCLUDE_DIR ${USER_PATH}/tool_chains/sysroots/aarch64-poky-linux/usr/include/openssl)

set(CMAKE_LIBRARY_PATH ${USER_PATH}/tool_chains/sysroots/aarch64-poky-linux/usr/lib64)
 
#对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
 
#下面的三个选项表示只在交叉环境中查找库和头文件
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

6. 编译脚本

#!/bin/bash
TOP_DIR=${PWD}

echo "---$TOP---"
source $TOP_DIR/tool_chains/environment-setup-aarch64-poky-linux

cd opencv
mkdir -p build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
	-D CMAKE_SYSTEM_NAME=linux \
	-D CMAKE_INSTALL_PREFIX=$TOP_DIR/opencv/output \
	-D OPENCV_EXTRA_MODULES_PATH=$TOP_DIR/opencv_contrib/modules \
	-D INSTALL_C_EXAMPLES=OFF \
	-D BUILD_EXAMPLES=OFF ..
make -j4
make install -j4

7. 修改CMakeLists.txt

增加:
set(CMAKE_CROSSCOMPILING TRUE)
include(cmake/toolchain.cmake)

message(STATUS "------------------debug-------------------")
message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
message(STATUS "CMAKE_INSTALL_LIBDIR: ${CMAKE_INSTALL_LIBDIR}")
message(STATUS "CMAKE_INSTALL_BINDIR: ${CMAKE_INSTALL_BINDIR}")
message(STATUS "CMAKE_INSTALL_INCLUDEDIR: ${CMAKE_INSTALL_INCLUDEDIR}")
message(STATUS "CMAKE_CROSSCOMPILING: ${CMAKE_CROSSCOMPILING}")
message(STATUS "CMAKE_C_COMPILER: ${CMAKE_C_COMPILER}")
message(STATUS "CMAKE_CXX_COMPILER: ${CMAKE_CXX_COMPILER}")
message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
message(STATUS "VERBOSE_MESSAGES: ${VERBOSE_MESSAGES}")
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "CMAKE_LIBRARY_PATH: ${CMAKE_LIBRARY_PATH}")
message(STATUS "------------------debug-------------------")

set(CMAKE_CONFIGURE_COMMAND
     cmake
     -DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX} 
     -DCMAKE_INSTALL_LIBDIR=${CMAKE_INSTALL_LIBDIR} 
     -DCMAKE_INSTALL_BINDIR=${CMAKE_INSTALL_BINDIR}
   #指明依赖的openssl的库路径
     -DOPENSSL_ROOT_DIR=${OPENSSL_LIBRARIES}
     -DOPENSSL_LIBRARIES=${OPENSSL_LIBRARIES}
     -DOPENSSL_INCLUDE_DIR=${OPENSSL_INCLUDE_DIR}
     -DCMAKE_INSTALL_INCLUDEDIR=${CMAKE_INSTALL_INCLUDEDIR}
     -DVERBOSE_MESSAGES=${VERBOSE_MESSAGES}
     -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
     -DNROFF_USEFUL=0
     --enable-ftp
     --enable-tftp
     -DBUILD_CURL_EXE=0
     -DENABLE_ARES=0
     -DUSE_ARES=0
     -DBUILD_TESTING=0
     -DENABLE_MANUAL=0
     -DBUILD_SHARED_LIBS=0
)

 8. opencv_contrib打补丁

将opencv_contrib-patch.rar 文件拷贝到

opencv_contrib\modules\xfeatures2d\src 路径下解压.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村里小码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值