OpenCV 4.3 交叉编译 AArch64 完整指南(x64 Ubuntu 20.04)
以下是根据AI大模型联网搜索和我实际操作安装反馈整理的文档。
适用场景:在 x64 架构的 Ubuntu 20.04 主机上,交叉编译适用于 AArch64(ARMv8)架构的 OpenCV 4.3 库,用于部署到树莓派、RK3588、TX2 等 ARM 设备。
目录
- 环境准备
- 安装交叉编译工具链
- [安装 AArch64 依赖库](#安装 AArch64 依赖库)
- [下载 OpenCV 源码](#下载 OpenCV 源码)
- 创建工具链文件
- [配置 CMake](#配置 CMake)
- 编译与安装
- 验证编译结果
- 打包与部署
- 常见错误与解决方案
- 在目标设备上使用
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),可以额外下载:
bashwget 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 # 打包文件
总结
✅ 你已完成:
- 安装交叉编译工具链
- 配置 AArch64 依赖环境
- 创建工具链文件
- 配置并编译 OpenCV 4.3
- 验证编译结果
- 打包准备部署
📦 产出物:
- 适用于 AArch64 的 OpenCV 动态库(.so 文件)
- 完整的头文件
- CMake 配置文件
- 测试工具程序
🚀 下一步:将打包文件传输到你的 ARM 设备,开始开发!
📅 日期 :2026-04-14
✍️ 基于实际编译过程整理