11、交叉编译Opencv----------Opencv移植Arm

交叉编译Opencv

OpenCv移植arm

修改cmake

opencv的交叉编译工具链在.../opencv-4.5.5/platforms/linux路径下,linux文件夹下是一些.cmake文件,对应不同的移植对象,所以选择aarch64-gnu.toolchain.cmake工具链,在进行编译前,需要修改cmake文件,修改platform/linux/aarch64-gnu.toolchain.cmake,改为如下:

bash 复制代码
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(CMAKE_C_COMPILER /opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-g++)
set(GNU_MACHINE "aarch64-linux-gnu" CACHE STRING "compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")

创建构建目录并配置 CMake

建议在 OpenCV 源代码目录下创建一个单独的构建目录:

bash 复制代码
mkdir build && cd build

运行 CMake 配置命令,指定工具链文件和安装前缀:

bash 复制代码
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/opt/arm-sysroot/usr/local \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_TESTS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DBUILD_EXAMPLES=OFF \
  -DWITH_ITT=OFF \
  -DWITH_CAROTENE=OFF \
  -DWITH_JPEG=ON \
  -DWITH_JPEG2000=ON \
  -DWITH_PNG=ON \
  -DWITH_FFMPEG=ON \
  -DWITH_GSTREAMER=ON \
  -DFFMPEG_INCLUDE_DIR=/opt/arm-sysroot/usr/local/include \
  -DFFMPEG_LIB_DIR=/opt/arm-sysroot/usr/local/lib \
  ..

ps

如果编译ffmpeg显示No, 则用如下命令试试

bash 复制代码
export CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu/bin/aarch64-linux-gnu-
export SYSROOT=/opt/arm-sysroot
export PREFIX=$SYSROOT/usr/local
export PATH=/opt/gcc-aarch64-linux-gnu/bin:$PATH

导入pkg

bash 复制代码
export PKG_CONFIG_PATH=$SYSROOT/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

执行cmake

bash 复制代码
cmake \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  -DCMAKE_C_COMPILER=${CROSS_COMPILE}gcc \
  -DCMAKE_CXX_COMPILER=${CROSS_COMPILE}g++ \
  -DCMAKE_INSTALL_PREFIX=$PREFIX \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_STATIC_LIBS=OFF \
  -DBUILD_EXAMPLES=OFF \
  -DBUILD_TESTS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
  -DENABLE_NEON=ON \
  -DENABLE_VFPV3=OFF \
  -DENABLE_TBB=OFF \
  -DWITH_OPENCL=OFF \
  -DWITH_IPP=OFF \
  -DWITH_TBB=OFF \
  -DCMAKE_BUILD_TYPE=Release \
  ..

不使用opencv_contrib版本

bash 复制代码
cmake \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=aarch64 \
  -DCMAKE_C_COMPILER=${CROSS_COMPILE}gcc \
  -DCMAKE_CXX_COMPILER=${CROSS_COMPILE}g++ \
  -DCMAKE_INSTALL_PREFIX=$PREFIX \
  -DBUILD_SHARED_LIBS=ON \
  -DBUILD_STATIC_LIBS=OFF \
  -DBUILD_EXAMPLES=OFF \
  -DBUILD_TESTS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DENABLE_NEON=ON \
  -DENABLE_VFPV3=OFF \
  -DENABLE_TBB=OFF \
  -DWITH_OPENCL=OFF \
  -DWITH_IPP=OFF \
  -DWITH_TBB=OFF \
  -DCMAKE_BUILD_TYPE=Release \
  ..

选项解释:

  • -DCMAKE_TOOLCHAIN_FILE:指定刚才完善的工具链文件。
  • -DCMAKE_BUILD_TYPE=Release:选择发布模式,启用优化。
  • -DCMAKE_INSTALL_PREFIX:指定安装路径为 sysroot 下的 usr/local 目录。这确保 OpenCV 的库和头文件被安装到适合 ARM 目标系统的位置。
  • -DBUILD_SHARED_LIBS=OFF:选择静态库编译,可以减少部署复杂性。如果希望使用动态库,可以设置为 ON,但需要在 ARM 设备上提供相应的动态库。
  • 其他选项如禁用测试和示例:加快编译速度,并减少不必要的组件。

编译并安装 OpenCV

在配置完成后,启动编译和安装过程:

bash 复制代码
make -j$(nproc)
sudo make install
  • make -j$(nproc):使用所有可用的 CPU 核心进行并行编译,加快编译速度。
  • make install:将编译后的文件安装到 CMAKE_INSTALL_PREFIX 指定的目录,即 /opt/arm-sysroot/usr/local。

安装后的 OpenCV 目录结构示例:

bash 复制代码
/opt/arm-sysroot/usr/local/
├── include/
│   └── opencv4/                   # OpenCV 头文件
├── lib/
│   ├── libopencv_core.a
│   ├── libopencv_imgproc.a
│   ├── ...                        # 其他 OpenCV 静态库
└── ...                            # 其他安装文件
相关推荐
沫璃染墨4 分钟前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
好好学习O(∩_∩)O4 小时前
[QT] 多线程moveToThread 和易踩的8个坑
开发语言·qt
北i7 小时前
Dubbo 默认超时重试:把下游打雪崩的隐形放大器
开发语言·qt·dubbo
扶尔魔ocy9 小时前
【qt openGL入门笔记】OSG实现显示飞机模型飞行的点迹(二)
qt·opengl·osg
Python图像识别11 小时前
43-【2027毕设】YOLO11暴力检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
bug和崩溃我都要21 小时前
QT 开发的专业截图录屏工具 - macOS版 / Windows版
windows·qt·mac·录屏·截屏
Python图像识别1 天前
40-【2027毕设】YOLO11面部口罩检测识别系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
Python图像识别1 天前
39-【2027毕设】YOLO11行人摔倒检测系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
Quz1 天前
QML PathView:直线路径与曲线路径
qt·动画·qml
扶尔魔ocy1 天前
【qt openGL入门笔记】OSG实现飞机模型在网格图上飞行
qt·opengl·osg