在windows上交叉编译opencv供RK3588使用

环境

NDK r27、RK3588 安卓板子、Android 12

步骤操作要点
1. NDK 下载选择 r27 版本,解压到无空格路径(如 C:/ndk
2. 环境变量配置添加 ANDROID_NDK_ROOT 和工具链路径到系统 PATH
3. CMake 参数调整指定 ANDROID_NATIVE_API_LEVEL=31ANDROID_ABI=aarch64-linux-android
4. 生成与编译使用 Ninja 生成器,执行 cmake --build build --parallel 8
5. 验证与部署检查库文件架构,通过 adb 部署到设备并测试

完整命令执行步骤

1.打开 cmd.exe 并切换到合适目录

mkdir F:/opencv_build
cd F:/opencv_build

2. 输入并执行 CMake 配置命令

cmake -S F:/opencv3.4.1/opencv-3.4.1 -B build ^-DANDROID_NDK="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/ndk/27.0.12077973" ^-DCMAKE_INSTALL_PREFIX="F:/opencv3.4.1/opencv_install" ^-DCMAKE_TOOLCHAIN_FILE="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/ndk/27.0.12077973/build/cmake/android.toolchain.cmake" ^-DANDROID_ABI="arm64-v8a" ^-DANDROID_NATIVE_API_LEVEL=31 ^-DCMAKE_TOOLCHAIN_NAME="aarch64-linux-android-clang" ^-G "Ninja" ^-DCMAKE_MAKE_PROGRAM="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/cmake/3.22.1/bin/ninja.exe" ^-DCMAKE_CXX_STANDARD=14 ^-DCMAKE_CXX_STANDARD_REQUIRED=ON ^-DCMAKE_POLICY_DEFAULT_CMP0057=NEW ^ -Wno-dev 

1. -S F:/opencv3.4.1/opencv-3.4.1
作用:指定 OpenCV 源代码的根目录路径。
含义:-S 表示 Source directory(源代码目录),即 OpenCV 的源代码存放位置。
2. -B build
作用:指定构建输出目录。
含义:-B 表示 Build directory(构建目录),生成的中间文件和编译结果将存放在此目录。这里设置为当前目录下的 build 文件夹。
3. -DANDROID_NDK="..."
作用:指定 Android NDK 的路径。
含义:-D 用于设置 CMake 变量,此处将 ANDROID_NDK 变量指向你安装的 NDK 路径。
确保路径正确,且 NDK 版本(27.0.12077973)与 OpenCV 兼容(OpenCV 3.4.1 可能支持较旧的 NDK,需注意兼容性)。
4. -DCMAKE_INSTALL_PREFIX="..."
作用:指定编译完成后安装 OpenCV 库的路径。
含义:编译成功后,OpenCV 的头文件、库文件等将安装到 F:/opencv3.4.1/opencv_install 目录。
5. -DCMAKE_TOOLCHAIN_FILE="..."
作用:指定 Android 的交叉编译工具链配置文件。
含义:android.toolchain.cmake 是 NDK 提供的脚本,用于配置 Android 的编译环境(如架构、API 级别等)。
必须与 NDK 版本一致,此处路径正确。
6. -DANDROID_ABI="arm64-v8a"
作用:指定目标架构为 ARM64-v8a(64 位 ARM 设备)。
含义:确保编译的库适用于 64 位 Android 设备。其他常见架构包括 armeabi-v7a(32 位)、x86 等。
7. -DANDROID_NATIVE_API_LEVEL=31
作用:设置目标 Android API 级别。
含义:31 对应 Android 12。需确保你的设备或目标 SDK 版本兼容此 API 级别。
8. -DCMAKE_TOOLCHAIN_NAME="aarch64-linux-android-clang"
作用:指定编译工具链名称(可能冗余)。
含义:
aarch64-linux-android-clang 表示使用 Clang 编译器为 ARM64 架构交叉编译。
注意:-DCMAKE_TOOLCHAIN_FILE 已指定工具链文件,此参数可能被覆盖,可尝试删除以避免冲突。
9. -G "Ninja"
作用:指定构建系统生成器为 Ninja。
含义:Ninja 是一个快速的构建工具,比默认的 Make 更高效。
10. -DCMAKE_MAKE_PROGRAM="..."
作用:指定 Ninja 的可执行文件路径。
含义:确保 CMake 使用你指定的 Ninja 版本(路径需正确)。
11. -DCMAKE_POLICY_DEFAULT_CMP0057=NEW
作用:设置 CMake 策略以解决路径兼容性问题。
含义:
CMP0057 与路径处理相关,设置为 NEW 可避免某些旧版本路径问题。
通常在较新版本的 CMake 中默认已启用,但显式设置可确保兼容性。

3. 执行编译与安装

cd build
ninja -j 8
ninja install

编译后,生成包含 libopencv_*.so 文件(如 libopencv_core.solibopencv_imgproc.so 等),将其复制到

app/src/main/jniLibs/arm64-v8a/

下集成应用。

但一开始未启用动态库构建:在 CMake 中,BUILD_SHARED_LIBS 选项控制生成动态库(.so)还是静态库(.a)。若未将其设置为 ON,默认可能生成静态库。OpenCV 的 CMake 配置会遵循此选项,若未显式开启动态库构建,最终产物就是一系列 .a 文件。

于是删除build文件夹,重新进行构建就可以了。

cmake -S F:/opencv3.4.1/opencv-3.4.1 -B build ^-DANDROID_NDK="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/ndk/27.0.12077973" ^-DCMAKE_INSTALL_PREFIX="F:/opencv3.4.1/opencv_install" ^-DCMAKE_TOOLCHAIN_FILE="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/ndk/27.0.12077973/build/cmake/android.toolchain.cmake" ^-DANDROID_ABI="arm64-v8a" ^-DANDROID_NATIVE_API_LEVEL=31 ^-DCMAKE_TOOLCHAIN_NAME="aarch64-linux-android-clang" ^-G "Ninja" ^-DCMAKE_MAKE_PROGRAM="C:/Users/wanyao.zhang/AppData/Local/Android/Sdk/cmake/3.22.1/bin/ninja.exe" ^-DCMAKE_CXX_STANDARD=14 ^-DCMAKE_CXX_STANDARD_REQUIRED=ON ^-DCMAKE_POLICY_DEFAULT_CMP0057=NEW ^-DBUILD_SHARED_LIBS=ON

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析MySQL事务锁

在 MySQL 中,事务锁是用于确保数据一致性和并发控制的重要机制。事务锁可以帮助防止多个事务同时修改同一数据,从而避免数据不一致和脏读、不可重复读、幻读等问题。 以下是 MySQL 事务锁的关键点总结: 事务锁:用于确保数据一致性和并发控制。锁的类型: 行级锁:InnoDB,粒…

vue3 文件下载(excel/rar/zip)

安装axios npm install axios 在项目中引入 import axios from axios; 1、get接口excel文件下载 const file_key ref() const downLoadExcel (value:any) > {//file_key.value value axios({method: "get",url: "/api/da/download_excel/",//url:…

RT-Thread RTThread studio 初使用

RT-Thread Studio 下载 https://www.rt-thread.org/studio.html 安装使用 https://bbs.elecfans.com/jishu_2425653_1_1.html 4 编译问题解决 问题一:error: unknown type name clock_t 具体的类型值是在sys/_types.h中定义的,需要包含sys/_types.h 这个…

汉诺塔专题:P1760 通天之汉诺塔 题解 + Problem D: 汉诺塔 题解

1. P1760 通天之汉诺塔 题解 题目背景 直达通天路小A历险记第四篇 题目描述 在你的帮助下,小 A 成功收集到了宝贵的数据,他终于来到了传说中连接通天路的通天山。但是这距离通天路仍然有一段距离,但是小 A 突然发现他没有地图&#xff0…

探索 HumanoidBench:类人机器人学习的新平台

在科技飞速发展的当下,类人机器人逐渐走进我们的视野,它们有着和人类相似的外形,看起来能像人类一样在各种环境里完成复杂任务,潜力巨大。但实际上,让类人机器人真正发挥出实力,还面临着重重挑战。 这篇文…

数据结构中的宝藏秘籍之广义表

广义表,也被称作列表(Lists),是一种递归的数据结构。它就像一个神秘的盒子,既可以装着单个元素(原子),也可以嵌套着其他的盒子(子列表)。比如广义表 (a (b c)…

【jenkins】首次配置jenkins

第一步,输入管理员密码 cat /var/jenkins_home/secrets/initialAdminPassword第二步,点击安装推荐的插件 第三步,创建管理员用户 第四步,返回实例 第五步, 升级jenkins 第六步, 修复提示 第七步&#xff0c…

Android studio—socketIO库return与emit的使用

文章目录 一、Socket.IO库简单使用说明1. 后端 Flask Flask-SocketIO2. Android 客户端集成 Socket.IO3. 布局文件注意事项 二、接受服务器消息的二种方法1. 客户端接收通过 emit 发送的消息功能使用场景后端代码(Flask-SocketIO)客户端代码&#xff08…

用Prompt 技术【提示词】打造自己的大语言智能体

机器如何按照人类的指令执行任务的探索 机器需具备理解任务叙述的能力,以便能够按照人类的指令执行任务,为机器提供一些范例作为参考,使其能够理解该执行的任务类型。这样的学习方式称为“Instruction learning”,透过精心设计的…

Node.js 数据库 事务 项目示例

1、参考:JavaScript语言的事务管理_js 函数 事务性-CSDN博客 或者百度搜索:Nodejs控制事务, 2、实践 2.1、对于MySQL或MariaDB,你可以使用mysql或mysql2库,并结合Promise或async/await语法来控制事务。 使用 mysql2…

【Mamba】MambaVision论文阅读

文章目录 MambaVision一、研究背景(一)Transformer vs Mamba​(二)Mamba in CV​ 二、相关工作​(一)Transformer 在计算机视觉领域的进展​(二)Mamba 在计算机视觉领域的探索​ 三、…

前端面试宝典---原型链

引言----感谢大佬的讲解 大佬链接 原型链示意图 原型链问题中需要记住一句话:一切变量和函数都可以并且只能通过__proto__去找它所在原型链上的属性与方法 原型链需要注意的点 看上图可以发现 函数(构造函数)也可以通过__proto__去找到原…

C语言---FILE结构体

一、FILE 结构体的本质与定义 基本概念 FILE 是 C 语言标准库中用于封装文件操作的结构体类型&#xff0c;定义于 <stdio.h> 中。它代表一个“文件流”&#xff0c;可以是磁盘文件、标准输入输出&#xff08;stdin/stdout/stderr&#xff09;或其他输入输出设备。 实现特…

基于大模型的直肠息肉诊疗全流程风险预测与方案优化研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型原理简介 2.2 大模型在医疗领域应用现状 三、直肠息肉术前预测与准备 3.1 基于大模型的术前风险预测 3.1.1 息肉性质预测 3.1.2 手术难度预测 3.2 基于预测结果的术前准备 3.…

华为OD机试真题——MELON的难题(2025A卷:200分)Java/python/JavaScript/C++/C语言/GO六种最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 2025华为OD真题目录全流程解析/备考攻略/经验分享 华为OD机试真题《MELON的…

AI数据分析与BI可视化结合:解锁企业决策新境界

大家好&#xff0c;今天我们来聊聊一个前沿而热门的话题——AI数据分析与BI可视化结合&#xff0c;如何携手推动企业决策迈向新高度。在数据爆炸的时代&#xff0c;企业如何高效利用这些数据&#xff0c;成为制胜的关键。AI数据分析与BI可视化的结合&#xff0c;正是解锁这一潜…

克服储能领域的数据处理瓶颈及AI拓展

对于储能研究人员来说&#xff0c;日常工作中经常围绕着一项核心但有时令人沮丧的任务&#xff1a;处理实验数据。从电池循环仪的嗡嗡声到包含电压和电流读数的大量电子表格&#xff0c;研究人员的大量时间都花在了提取有意义的见解上。长期以来&#xff0c;该领域一直受到对专…

【SpringBoot+Vue自学笔记】002 SpringBoot快速上手

跟着这位老师学习的&#xff1a;https://www.bilibili.com/video/BV1nV4y1s7ZN?vd_sourceaf46ae3e8740f44ad87ced5536fc1a45 最好和老师的idea版本完全一致&#xff01;截至本文写的当日最新的idea好像默认jdk17&#xff0c;配置时遇到很多bug。 &#x1f33f; Spring Boot&a…

SpringAI+DeepSeek大模型应用开发——2 大模型应用开发架构

目录 2.大模型开发 2.1 模型部署 2.1.1 云服务-开放大模型API 2.1.2 本地部署 搜索模型 运行大模型 2.2 调用大模型 接口说明 提示词角色 ​编辑 会话记忆问题 2.3 大模型应用开发架构 2.3.1 技术架构 纯Prompt模式 FunctionCalling RAG检索增强 Fine-tuning …

蓝桥杯12. 日期问题

日期问题 原题目链接 题目描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。 小明知道这些日期都在 1960 年 1 月 1 日 至 2059 年 12 月 31 日 之间。 令小明头疼的是&#xff0c;这些日期采用的格式非常不统一&#xff1a; 有的采用 年/月/日有的采用 月…