ndk 编译opencv(去除libandroid.so mediandk依赖)
简单的bash运行
需要关注的:
- OPENCV_EXTRA_MODULES_PATH : opencv contrib库
- BUILD_opencv_XXX :添加contrib库后默认是contrib库全部编译,用这个控制需要关闭的
- NDK的路径
export ANDROID_NDK=/media/hello/data/3rd_party/25.2.9519653# rm -rf ndk_build# mkdir ndk_build
cd ndk_buildcmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \-DANDROID_ABI="arm64-v8a" \-DANDROID_NDK=$ANDROID_NDK \-DANDROID_PLATFORM=android-29 \-DANDROID_STL=c++_shared \-DOPENCV_EXTRA_MODULES_PATH=/media/hello/data/3rd_party/opencv4.6.0/opencv_contrib/modules \-DBUILD_JAVA=OFF \-DBUILD_FAT_JAVA_LIB=OFF \-DBUILD_ANDROID_EXAMPLES=OFF \-DWITH_ONNX=ON \-Dfreetype_DIR=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/lib/cmake/freetype/ \-DFREETYPE_INCLUDE_DIRS=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/include/freetype2 \-DFREETYPE_LIBRARIES=/media/hello/data/3rd_party_lib/freetype/2.13.2/arm64-v8a/lib/libfreetype.so \-Dharfbuzz_DIR=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/lib/cmake/harfbuzz/ \-DHARFBUZZ_INCLUDE_DIRS=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/include/harfbuzz \-DHARFBUZZ_LIBRARIES=/media/hello/data/3rd_party_lib/harfbuzz/9.0.0/arm64-v8a/lib/libharfbuzz.so \-DWITH_FREETYPE=ON \-DBUILD_opencv_freetype=ON \-DCMAKE_BUILD_TYPE=Release \-DBUILD_SHARED_LIBS=ON \-DWITH_ARUCO=OFF \-DBUILD_opencv_barcode=OFF \-DBUILD_opencv_bgsegm=OFF \-DBUILD_opencv_datasets=OFF \-DBUILD_opencv_python2=OFF \-DBUILD_opencv_python3=OFF \-DBUILD_TESTS=OFF \-DCMAKE_INSTALL_PREFIX=/media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a \-DCMAKE_CXX_FLAGS="-frtti -Os" \-DCMAKE_C_FLAGS="-Os"make -j$(nproc)make install
在libopencv_videoio.so中会包含
hello@hello:/media/hello/data/3rd_party/opencv4.6.0/opencv-4.6.0$ objdump -x /media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a-src/sdk/native/libs/arm64-v8a/libopencv_videoio.s
o |grep NEEDEDNEEDED libopencv_imgcodecs.soNEEDED libdl.soNEEDED liblog.soNEEDED libopencv_imgproc.soNEEDED libopencv_core.soNEEDED libandroid.soNEEDED libmediandk.soNEEDED libcamera2ndk.soNEEDED libc++_shared.soNEEDED libc.so
对于简单的应用不需要和android互操作的,想要去除libandroid.so libmediandk.so的依赖:
在modules/videoio/cmake/init.cmake中注释掉下面这两个
# add_backend("android_mediandk" WITH_ANDROID_MEDIANDK)
# add_backend("android_camera" WITH_ANDROID_NATIVE_CAMERA)
去除后
hello@hello:/media/hello/data/3rd_party/opencv4.6.0/opencv-4.6.0$ objdump -x /media/hello/data/3rd_party_lib/opencv/4.6.0/arm64-v8a/sdk/native/libs/arm64-v8a/libopencv_videoio.so |grep NEEDEDNEEDED libopencv_imgcodecs.soNEEDED libdl.soNEEDED libopencv_core.soNEEDED libc++_shared.soNEEDED libc.so
相关文章:
ndk 编译opencv(去除libandroid.so mediandk依赖)
简单的bash运行 需要关注的: OPENCV_EXTRA_MODULES_PATH : opencv contrib库BUILD_opencv_XXX :添加contrib库后默认是contrib库全部编译,用这个控制需要关闭的NDK的路径 export ANDROID_NDK/media/hello/data/3rd_party/25.2.…...
MySQL索引和其底层数据结构介绍
索引在项目中非常常见,它是一种帮助MySQL高效获取数据的数据结构,主要用来提高数据检索效率,降低数据库的I/O成本。同时,索引列可以对数据进行排序,降低数据排序的成本,也能减少CPU的消耗。就像是书的目录&…...
No module named ‘posepile.util‘
目录 No module named posepile.util 解决方法: No module named posepile.util 错误代码: import posepile.datasets3d as ds3d pip install git+https://github.com/isarandi/PosePile.git. And then, I executed the following command, " python -m metrabs_py…...
SQL布尔盲注、时间盲注
一、布尔盲注 布尔盲注(Boolean-based Blind SQL Injection)是一种SQL注入技术,用于在应用程序不直接显示数据库查询结果的情况下,通过构造特定的SQL查询并根据页面返回的不同结果来推测数据库中的信息。这种方法依赖于SQL查询的…...
RocketMQ与kafka如何解决消息丢失问题?
0 前言 消息丢失基本是分布式MQ中需要解决问题,消息丢失时保证数据可靠性的范畴。如何保证消息不丢失程序员面试中几乎不可避免的问题。本文主要说明RocketMQ和Kafka在解决消息丢失问题时,在生产者、Broker和消费者之间如何解决消息丢失问题。 1.Rocket…...
Uniapp 获取定位详解:从申请Key到实现定位功能
文章目录 前言一、申请定位所需的 Key1.1 注册高德开发者账号1.2 创建应用1.3 添加 Key 二、在 Uniapp 中配置定位功能2.1 引入高德地图 SDK2.2 获取定位权限 三、实现定位功能3.1 使用 uni.getLocation 获取位置3.2 处理定位失败的情况3.3 持续定位3.4 停止持续定位 四、总结 …...
【Vue3 入门到实战】14. telePort 和 Suspense组件
目录 编辑 1. telePort 2. 异步组件Suspense 3. 总结 1. telePort telePort 允许你将子组件渲染到 DOM 中的任何位置,而不仅仅是在其父组件的范围内。这对于模态框(modals)、提示框(tooltips)和其他需要脱…...
Golang的并发编程案例详解
Golang的并发编程案例详解 一、并发编程概述 并发编程是指程序中有多个独立的执行线索,并且这些线索在时间上是重叠的。在 Golang 中,并发是其核心特性之一,通过 goroutine 和 channel 来支持并发编程,使得程序可以更高效地利用计…...
IS-IS 泛洪机制 | LSP 处理流程
IS-IS 泛洪机制 作为一种链路状态路由协议,IS-IS 与 OSPF 类似,在学习和计算路由之前,区域中的路由器首先需交换链路状态信息,最终使所有路由器的链路状态数据库达到一致状态,这就如同每台路由器都拥有一张相同的网络…...
原型模式详解(Java)
原型模式(Prototype Pattern),作为一种极具代表性的创建型设计模式,其核心思想在于通过复制,亦即克隆现有的对象,来达成创建新对象的目的,而非依赖传统的构造函数途径。这一模式巧妙地基于现有对…...
内存条2R×4 2400和4R×4 2133的性能差异
内存条2R4 2400和4R4 2133的性能差异 2R4 2400 和 4R4 2133 是两种不同的内存条规格,主要在Rank数量和频率上有所不同,具体性能差异如下: 1. Rank数量 2R4:表示内存条有2个Rank,每个Rank有4个内存芯片。4R4ÿ…...
安装并配置 MySQL
MySQL 是世界上最流行的开源关系型数据库管理系统之一,因其高性能、可靠性和易用性而被广泛应用于各种规模的企业级应用中。本文将详细介绍如何在不同的操作系统上安装和配置 MySQL,帮助你快速搭建起一个功能完善的数据库环境。 选择适合你的安装方式 …...
常用的网络安全设备
一、 WAF 应用防火墙 范围:应用层防护软件 作用: 通过特征提取和分块检索技术进行模式匹配来达到过滤,分析,校验网络请求包的目的,在保证正常网络应用功能的同时,隔绝或者阻断无效或者非法的攻击请求 可…...
【蓝桥】线性DP--最快洗车时间
题目描述 解题思路 完整代码 举例 总结 基于 0/1 背包思想 解决 洗车时间分配问题,本质上是子集和问题【给定一个 正整数数组 nums 和一个目标值 target,判断是否可以从 nums 选择 若干个数(每个数最多选一次),使…...
Spring Boot比Spring多哪些注解?
Spring Boot 相比 Spring 多了很多自动化配置和简化开发的注解,主要包括以下几类: Spring Boot 启动与自动配置相关Spring Boot 配置相关Spring Boot Web 相关Spring Boot 测试相关Spring Boot 条件装配相关Spring Boot 监控与 Actuator 相关 1. Spring…...
springboot021校园周边美食探索及分享平台
版权声明 所有作品均为本人原创,提供参考学习使用,如需要源码数据库配套文档请移步 www.taobysj.com 搜索获取 技术实现 开发语言:Javavue。 框架:后端spingboot前端vue。 模式:B/S。 数据库:mysql。 开…...
【网络通信】传输层之UDP协议
【网络通信】传输层之UDP协议 传输层端对端通信实现端到端通信的关键技术 UDP协议再谈端口号端口号划分关于端口号的两个问题 UDP协议基本格式UDP通信的特点UDP的缓冲区UDP数据报的最大长度基于UDP的应用层协议如何封装UDP报文以及如何交付UDP报文进一步理解封装和解包 传输层 …...
Python环境搭建与量化交易开发:从基础到实战
Python环境搭建与量化交易开发:从基础到实战 在量化交易领域,Python因其强大的数据处理能力和丰富的库支持而成为首选编程语言。本文将指导您如何在本地搭建一个适合量化交易的Python环境,并介绍一些实用的工具和技巧。 《QMT开通规则分享》…...
软著申请(六)软著返修流程【2025年最新版】
软著申请(六)软著返修流程【2025年最新版】 一、软著返修流程1、软著返修流程须知2、相关细节二、针对大模型特殊补正条件三、备注本服务提供详细的软件著作权申请流程指导。申请人严格按照指导步骤完成申请,若最终未能成功获得著作权登记,可联系服务提供方进行免费咨询和指…...
SOUI基于Zint生成Code11码
Code 11 是一种高密度的数字条形码,主要用于标识电信设备和电子元件。它的名称来源于其能够编码 11 种字符:数字 0-9 和连接符 -。Code 11 是一种双向可读的条形码,支持校验位以提高数据准确性。 在使用BARCODE_CODE11码制生成code 11码时可指…...
从样式覆盖到版本升级:全面解析Antd表格固定列对齐问题的解决路径
1. 问题复现:当Antd表格固定列开始"跳舞" 第一次遇到Antd表格固定列错位问题时,我正喝着咖啡调试一个后台管理系统。突然发现表格右侧的固定列像被施了魔法——表头和内容列完全错开,活像跳着蹩脚的探戈。这种问题在Antd 3.x版本中…...
嵌入式系统调试技术:从JTAG到多核同步的实战指南
1. 嵌入式系统调试技术概述在嵌入式系统开发过程中,调试环节往往占据整个开发周期的40%-60%时间。与通用计算机系统不同,嵌入式系统通常运行在资源受限的环境中,缺乏标准输入输出设备,这使得调试工作更具挑战性。我曾参与过多个工…...
GDScript Mod Loader:为Godot游戏打造专业模组生态的完整指南
1. 项目概述:为你的Godot游戏注入社区活力如果你是一名使用Godot引擎的独立游戏开发者,或者是一位热衷于为喜爱的游戏创造新内容的玩家,那么“模组”这个概念你一定不陌生。模组,或者说Mod,是游戏社区生命力的重要源泉…...
搜搜果:一种面向AI生成内容验真与品牌可见度监测的实现方案
1. 问题定义 随着大语言模型(LLM)广泛集成到搜索、问答、推荐等场景中,出现两个可观测的问题: 内容可信性问题:模型会以高置信度输出事实上不存在的实体、事件或引用(幻觉,hallucination&#…...
什么是dapr?为什么要使用它
官方文档https://docs.dapr.io/zh-hans/developing-applications/building-blocks/ 介绍 dapr是一个分布式运行时(Distributed Application Runtime)是一个开源项目,它把构建微服务的最佳实践沉淀为开发者可直接调用的标准化API,…...
Agent设计模式全景图——从ReAct到Multi-Agent的完整知识体系
Agent概念在2023年就已出现,2024年是框架快速迭代的一年。到了2026年,Agent设计模式逐渐成熟,成为工程实践的关键。 GitHub上关于Agent的开源项目突破10万个,LangChain、LangGraph、AutoGen、CrewAI……框架层出不穷。但翻遍这些文…...
Davinci vs. 其他开源BI工具(Superset/Metabase)实战对比:我们团队为什么最终选了它?
Davinci vs. 其他开源BI工具实战对比:技术选型的深度思考 在数据驱动决策的时代,企业级BI工具的选择直接影响着数据分析的效率和深度。当我们团队面临开源BI工具选型时,Davinci、Apache Superset和Metabase成为了主要候选对象。经过三个月的实…...
从F103到F407:老STM32玩家升级指南,详解性能差异与项目移植实战
从F103到F407:老STM32玩家升级指南,详解性能差异与项目移植实战 对于熟悉STM32F1系列开发的工程师来说,升级到F407系列既是一次性能跃迁的机会,也伴随着学习曲线和移植挑战。本文将深入剖析两款芯片的差异,并提供可落地…...
如何在没有iCloud 备份的情况下从iPhone恢复联系人
不小心删除了 iPhone 上的重要联系人或短信,却发现没有 iCloud 备份可以依靠?别担心;没有 iCloud 备份的数据丢失并不意味着它永远消失了。无论您是误删了短信,还是在iOS更新后丢失了联系人,仍然有办法找回数据。在本指…...
突破音频平台限制:基于Go+Qt5的喜马拉雅下载器技术解析
突破音频平台限制:基于GoQt5的喜马拉雅下载器技术解析 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字化学习与娱…...
