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+XYEnter)。

💡 说明 :这是最简配置,避免了 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

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

相关推荐
秋月的私语3 小时前
遥感影像拼接线优化工具:基于Qt+GDAL+OpenCV的从一到二实践
开发语言·qt·opencv
Westward-sun.21 小时前
OpenCV + dlib 人脸关键点检测学习笔记(68点)
人工智能·笔记·opencv·学习·计算机视觉
木心术11 天前
openclaw与Hermes的优劣势对比
人工智能·python·opencv·自动化
sali-tec1 天前
C# 基于OpenCv的视觉工作流-章50-霍夫找圆
图像处理·人工智能·opencv·算法·计算机视觉
迷藏4941 天前
**基于Python与OpenCV的光场显示图像处理技术实践**在现代显示技术发展中,**光场显示(Light
java·图像处理·python·opencv
我材不敲代码1 天前
OpenCV+Dlib实战:人脸检测 + 表情识别 + 年龄性别预测
人工智能·opencv·计算机视觉
Westward-sun.1 天前
OpenCV 疲劳检测实战:用 dlib 计算眼睛纵横比 (EAR)
人工智能·opencv·计算机视觉·视觉检测
輕華1 天前
OpenCV三大传统人脸识别算法:EigenFace、FisherFace与LBPH实战
人工智能·opencv·算法
Fleshy数模1 天前
openCV实现实时颜色识别:从基础检测到指定颜色区域提取
人工智能·opencv·计算机视觉