适用于开发板离线+极简系统;
采用外部主机交叉编译+传输的思路
1.工具与环境需求
交叉编译工具,如aarch64-linux-gnu-gcc/g++
cmake基础编译工具
sudo apt install aarch64-linux-gnu-gcc aarch64-linux-gnu-g++ cmake
2.下载源码
进入工作目录;
git clone opencv的库到本地,并选择相应版本
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.8.0
克隆下来的东西都会放在当前目录的opencv目录下;
在当前目录,创建build、opencv-arm-install文件夹,用于存放编译与安装结果。
3.编译安装
同一目录下,新建一个工具链文件toolchain.cmake,写入内容:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR aarch64)
SET(CMAKE_SYSROOT /home/why/arm-sysroot)
SET(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)
SET(CMAKE_FIND_ROOT_PATH /home/why/arm-sysroot)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
注意:根据主机具体位置修改
CMAKE_SYSROOT 环境变量为交叉编译工具链的系统文件,包括了工具链的头文件库文件。
可以通过开发板现有的arm架构库拷贝;或者自主编译构造;
自主编译可见: 于离线OpenEuler系统开发板上安装g++/gcc及各类基础库-CSDN博客
CMAKE_C_COMPILER 环境变量为交叉编译工具链的位置
可以通过which查询
进入编译目录,进行编译
cd build
cmake ../opencv \
-DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/home/why/projects/opencv/opencv-arm-install \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DWITH_TIFF=OFF \
-DWITH_QT=OFF \
-DWITH_GTK=OFF \
-DWITH_OPENGL=OFF \
-DWITH_V4L=OFF \
-DWITH_JPEG=ON \
-DWITH_PNG=ON \
-DBUILD_opencv_python=OFF
注意修改DCMAKE_INSTALL_PREFIX 环境变量为我们刚刚创建的/opencv-arm-install目录
编译,安装(过程需要一定时间)
make -j$(nproc)
make install
此时在我们创建的opencv-arm-install目录下,就可以找到编译出来的各个文件;
文件结构通常包括lib、include、bin等目录;
将整个opencv-arm-install打包,传输到开发板;解压到主目录下的usr/文件夹下,即可成功将opencv的各种库文件安装进开发板系统目录。