OpenCV 4.3 交叉编译 AArch64 完整指南(x64 Ubuntu 20.04)

OpenCV 4.3 交叉编译 AArch64 完整指南(x64 Ubuntu 20.04)

以下是根据AI大模型联网搜索和我实际操作安装反馈整理的文档。


适用场景:在 x64 架构的 Ubuntu 20.04 主机上,交叉编译适用于 AArch64(ARMv8)架构的 OpenCV 4.3 库,用于部署到树莓派、RK3588、TX2 等 ARM 设备。


目录

  1. 环境准备
  2. 安装交叉编译工具链
  3. [安装 AArch64 依赖库](#安装 AArch64 依赖库)
  4. [下载 OpenCV 源码](#下载 OpenCV 源码)
  5. 创建工具链文件
  6. [配置 CMake](#配置 CMake)
  7. 编译与安装
  8. 验证编译结果
  9. 打包与部署
  10. 常见错误与解决方案
  11. 在目标设备上使用

1. 环境准备

1.1 系统要求

  • 主机:x64 架构,Ubuntu 20.04
  • 目标:AArch64(ARMv8)架构
  • OpenCV 版本:4.3.0
  • 磁盘空间:至少 5GB

1.2 更新系统

bash 复制代码
sudo apt update
sudo apt upgrade -y

2. 安装交叉编译工具链

bash 复制代码
sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

验证安装:

bash 复制代码
aarch64-linux-gnu-gcc --version
# 输出示例:aarch64-linux-gnu-gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

3. 安装 AArch64 依赖库

安装完整的交叉编译基础库(关键步骤):

bash 复制代码
sudo apt install -y crossbuild-essential-arm64

安装其他常用依赖库的 arm64 版本:

bash 复制代码
sudo dpkg --add-architecture arm64
sudo apt update

💡 提示:如果某些包找不到,可以暂时跳过,后续在 CMake 中关闭对应模块。


4. 下载 OpenCV 源码

bash 复制代码
# 进入下载目录(根据你的实际情况调整)
cd ~/下载

# 下载 OpenCV 4.3.0
wget https://github.com/opencv/opencv/archive/refs/tags/4.3.0.tar.gz
tar -xzf 4.3.0.tar.gz
cd opencv-4.3.0

💡 提示:如果需要 extra 模块(opencv_contrib),可以额外下载:

bash 复制代码
wget https://github.com/opencv/opencv_contrib/archive/4.3.0.tar.gz
tar -xzf 4.3.0.tar.gz

5. 创建工具链文件

在 OpenCV 源码根目录下创建 aarch64-toolchain.cmake:

bash 复制代码
cd ~/下载/opencv-4.3.0
nano aarch64-toolchain.cmake

写入以下内容:

cmake 复制代码
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

保存并退出(nano:Ctrl+X → Y → Enter)。

💡 说明 :这是最简配置,避免了 CMAKE_SYSROOT 可能引起的链接问题。


6. 配置 CMake

6.1 创建独立编译目录

bash 复制代码
cd ~/下载/opencv-4.3.0
mkdir -p build-aarch64
cd build-aarch64

6.2 运行 CMake 配置

bash 复制代码
cmake .. \
    -DCMAKE_TOOLCHAIN_FILE=../aarch64-toolchain.cmake \
    -DCMAKE_INSTALL_PREFIX=./install \
    -DCMAKE_BUILD_TYPE=RELEASE \
    -DBUILD_SHARED_LIBS=ON \
    -DENABLE_NEON=OFF \
    -DWITH_OPENMP=OFF \
    -DWITH_IPP=OFF \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_PERF_TESTS=OFF

💡 说明:

  • ENABLE_NEON=OFF:暂时关闭 NEON 优化,避免潜在的编译问题
  • WITH_IPP=OFF:关闭 Intel IPP,该库不支持交叉编译
  • 其他 OFF 选项可以加快编译速度

6.3 验证配置成功

配置成功后,你应该看到类似输出:

复制代码
-- Configuring done
-- Generating done
-- Build files have been written to: /home/wh/下载/opencv-4.3.0/build-aarch64

7. 编译与安装

7.1 开始编译

bash 复制代码
make -j$(nproc)

⏱️ 编译时间:大约 30-60 分钟,取决于电脑性能。

7.2 安装

bash 复制代码
make install

安装完成后,所有文件在 build-aarch64/install 目录下。


8. 验证编译结果

8.1 检查目录结构

bash 复制代码
cd ~/下载/opencv-4.3.0/build-aarch64/install
ls -la
# 应该看到 bin/, include/, lib/ 等目录

8.2 验证库文件架构

bash 复制代码
file lib/libopencv_core.so.4.3

正确输出:

复制代码
lib/libopencv_core.so.4.3: ELF 64-bit LSB shared object, ARM aarch64, ...

8.3 查看版本

bash 复制代码
# 查看版本字符串(从二进制中提取)
strings bin/opencv_version | grep "4.3"

8.4 统计编译结果

bash 复制代码
# 统计库文件数量
ls -1 lib/libopencv_*.so | wc -l

# 查看总大小
du -sh install/

9. 打包与部署

9.1 打包

bash 复制代码
cd ~/下载/opencv-4.3.0/build-aarch64
tar -czf opencv-4.3.0-aarch64.tar.gz install/

9.2 传输到目标设备

bash 复制代码
# 方式1:直接复制目录
scp -r install/ user@目标设备IP:/home/user/opencv-4.3.0

# 方式2:传输打包文件
scp opencv-4.3.0-aarch64.tar.gz user@目标设备IP:/home/user/

10. 常见错误与解决方案

错误 1:/usr/bin/ld: 找不到 /usr/aarch64-linux-gnu/lib/libc.so.6

原因:链接器找不到基础 C 库。

解决方案:

bash 复制代码
sudo apt install -y crossbuild-essential-arm64

错误 2:CMake Error: Could not find toolchain file

原因:工具链文件路径不正确或文件名写错。

解决方案:

bash 复制代码
# 确认文件存在
ls -la ~/下载/opencv-4.3.0/aarch64-toolchain.cmake

# 使用绝对路径
-DCMAKE_TOOLCHAIN_FILE=/home/wh/下载/opencv-4.3.0/aarch64-toolchain.cmake

错误 3:CMake Error: CMAKE_CXX_COMPILER not set

原因:工具链文件未被正确加载。

解决方案 :确保 -DCMAKE_TOOLCHAIN_FILE 参数在 CMake 命令的最前面,并且路径正确。

错误 4:编译时卡在下载 IPPICV

原因:网络问题或 IPP 不支持交叉编译。

解决方案:

bash 复制代码
# 在 CMake 配置时添加
-DWITH_IPP=OFF

错误 5:undefined reference to ...

原因:缺少某些依赖库的 arm64 版本。

解决方案:

bash 复制代码
# 安装缺失的库
sudo apt install -y 缺少的库名:arm64

# 或在 CMake 中关闭对应模块
-DWITH_模块名=OFF

11. 在目标设备上使用

11.1 部署到目标设备

假设你已经将 install 目录复制到目标设备的 /home/user/opencv-4.3.0:

bash 复制代码
# 移动到系统目录(可选)
sudo mv /home/user/opencv-4.3.0/install /usr/local/opencv4.3

11.2 设置环境变量

在目标设备的 ~/.bashrc 中添加:

bash 复制代码
export LD_LIBRARY_PATH=/usr/local/opencv4.3/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/opencv4.3/lib/pkgconfig:$PKG_CONFIG_PATH

使其生效:

bash 复制代码
source ~/.bashrc

11.3 测试 OpenCV

创建测试文件 test.cpp:

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    std::cout << "OpenCV version: " << CV_VERSION << std::endl;
    
    // 创建一张图像
    cv::Mat img = cv::Mat::zeros(480, 640, CV_8UC3);
    cv::circle(img, cv::Point(320, 240), 100, cv::Scalar(0, 0, 255), -1);
    cv::imwrite("output.jpg", img);
    
    std::cout << "Image saved as output.jpg" << std::endl;
    return 0;
}

编译运行:

bash 复制代码
g++ test.cpp -o test_opencv \
    -I/usr/local/opencv4.3/include/opencv4 \
    -L/usr/local/opencv4.3/lib \
    -lopencv_core -lopencv_imgproc -lopencv_imgcodecs

./test_opencv

11.4 CMake 项目配置

在项目的 CMakeLists.txt 中:

cmake 复制代码
cmake_minimum_required(VERSION 3.10)
project(MyProject)

set(OpenCV_DIR /usr/local/opencv4.3/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)

add_executable(myapp main.cpp)
target_link_libraries(myapp ${OpenCV_LIBS})

附录:完整文件结构

复制代码
/home/wh/下载/opencv-4.3.0/
├── aarch64-toolchain.cmake          # 工具链文件
├── CMakeLists.txt                   # OpenCV 主配置
├── modules/                         # 模块源码
└── build-aarch64/                   # 编译目录
    ├── install/                     # 安装目录(最终产物)
    │   ├── bin/                     # 可执行工具
    │   ├── include/                 # 头文件
    │   ├── lib/                     # 库文件
    │   └── share/                   # 额外资源
    └── opencv-4.3.0-aarch64.tar.gz  # 打包文件

总结

✅ 你已完成:

  1. 安装交叉编译工具链
  2. 配置 AArch64 依赖环境
  3. 创建工具链文件
  4. 配置并编译 OpenCV 4.3
  5. 验证编译结果
  6. 打包准备部署

📦 产出物:

  • 适用于 AArch64 的 OpenCV 动态库(.so 文件)
  • 完整的头文件
  • CMake 配置文件
  • 测试工具程序

🚀 下一步:将打包文件传输到你的 ARM 设备,开始开发!


📅 日期 :2026-04-14

✍️ 基于实际编译过程整理

相关推荐
小豆庄2 小时前
处理含车牌/人脸的隐私视频,如何做到数据不离机?
opencv·ai·云计算·视频
小徐不徐说9 小时前
C++ 机器视觉入门:从零搭建 AOI 开发环境(OpenCV + CMake)
开发语言·c++·opencv
晨间晓3 天前
图片里的高频和低频是什么?用华为云码道开发 OpenCV 傅里叶频谱分析工具
opencv·计算机视觉·华为云
晨间晓3 天前
图片里的阴影能不能减弱?用华为云码道开发 OpenCV 光照校正工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的细小噪点怎么平滑?用华为云码道开发 OpenCV 图像滤波对比工具
人工智能·opencv·华为云
偷吃米饭4 天前
图片特征怎么描述?用华为云码道开发 OpenCV ORB 特征提取工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的关键点怎么找?用华为云码道开发 OpenCV FAST 特征点检测工具
人工智能·opencv·华为云
晨间晓4 天前
二值图里的噪点怎么去掉?用华为云码道开发 OpenCV 形态学操作工具
人工智能·opencv·华为云
晨间晓4 天前
图片里的角点在哪里?用华为云码道开发 OpenCV Harris 角点检测工具
人工智能·opencv·华为云
晨间晓5 天前
图片细节丰富不丰富?用华为云码道开发 OpenCV 纹理复杂度分析工具
人工智能·opencv·华为云