Android NDK开发实战之环境搭建篇(so库,Gemini ai)
文章流程
音视频安卓开发首先涉及到ffmpeg编译打包动态库,先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。
So库适配
⽇常开发我们经常会使⽤到第三库,涉及到底层的语⾳,视频等都需要添加so库。⽽so库的体积⼀般来说 ⾮常的⼤,不搞清楚随意添加会导致apk体积暴增。
今天就简单分析⼀下,各个架构的cpu的区别,读者只要能⼤致了解这些⽬录的含义就可以 了,不必深究。
32位处理器与64位处理器区别
32 位处理器与 64 位处理器之间的主要区别涉及计算能力、内存寻址、性能以及支持的操作系统和应用程序。
位数和数据处理能力
- 32 位处理器:使用 32 位的地址总线,能够处理 32 位的数据。
- 最大能够寻址的内存为 4 GB(2^32 字节)。
- 64 位处理器:使用 64 位的地址总线,能够处理 64 位的数据。
- 理论上,最大能够寻址的内存为 16 EB(Exabytes,2^64 字节),实际可用内存通常受到操作系统和硬件的限制。
操作系统和软件支持
- 32 位处理器:只能运行 32 位的操作系统和应用程序。
- 64 位处理器:可以运行 64 位的操作系统,并且通常也支持运行 32 位应用程序(通过兼容模式)。
性能
- 32 位处理器:在处理较小的数据类型(如整数和字符)时可能比较高效,但在处理大数据时效率较低。
- 64 位处理器:能够在一次操作中处理更多的数据,提供更高的性能,尤其是在数据密集型的应用程序中(如图像处理、大数据计算等)。
指令集
- 32 位处理器:使用较少的指令集,功能相对简单。
- 64 位处理器:通常具有更丰富的指令集,支持更多的指令和功能,能够提高编程的灵活性和性能。
应用场景
- 32 位处理器:适合于资源受限的设备(如嵌入式系统)和运行较老软件的场景。
- 64 位处理器:适合于需要高性能计算的应用场景,如服务器、大型数据库、高端工作站和现代桌面计算。
小结:32 位和 64 位处理器之间的主要区别在于内存寻址能力、处理性能和支持的软件环境。64 位处理器提供更高的性能和更大的内存支持,是现代计算的主流选择。对于需要处理大量数据或运行复杂应用程序的用户,64 位处理器更加合适。
.so库
.so库是什么, NDK编译出来的动态链接库。⼀些重要的加密算法或者核⼼协议⼀般都⽤c/c++写然后给java调⽤。这样可以避免反编译后查看到应⽤ 的源码。
.so库⼜该如何存放?
处理.so⽂件时有⼀条简单却并不知名的重要法则。 你应该尽可能的提供专为每个ABI优化过的.so⽂件,但要么全部⽀持,要么都不⽀持:你不应该混合着使 ⽤。你应该为每个ABI⽬录提供对应的.so⽂件。
ABI : application binary interface 是规范.
EABI : Embedded application binary interface 2 EABI : 是 arm 对于 ABI规范的⽐较新(2005年)的实现 // powerpc也有⼀个实现叫做EABI
举例:
CPU架构
Android⽬前⽀持以下7种ABIs(Application Binary Interface的缩写,即应⽤⼆进制接⼝):mips, mips64, X86, X86-64, arm64-v8a, armeabi, armeabi-v7a
如何选择?
⼤⼚App如何选择so库:值得⼀提的是,这4⼤App都只适配了⼀种Cpu架构。
架构的兼容性
直接说结论:新版本兼容旧版本,带来的影响是性能上的区别,旧版本不一定支持新版。
适配⽅案选择
⽅案⼀:只适配armeabi 优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64) armeabi,armewabi 缺点:性能低,相当于在绝⼤多数⼿机上都是需要辅助ABI或动态转码来兼容(CPU⾃⼰做的)
⽅案⼆:只适配armeabi-v7a 同理⽅案⼀,只是⼜筛掉了⼀部分⽼旧设备,在性能和兼容⼆者中⽐较平衡
⽅案三: 只适配arm64-v8 优点: 性能最佳 缺点:只能运⾏在arm64-v8上,要放弃部分⽼旧设备⽤户。
Google Play 从2019年8⽉开始,就强制APP适配arm64-v8a,以慢慢淘汰32位的armeabi-v7a。
注意事项
如果你的App同时存在两种架构如:"armeabi", "arm64 v8a"。那么不同Cpu架构的⼿机便只会加载对应的SO库不再向下兼容。 所以需要编译两份版本的.SO库文件。
后记 性能+兼容能否兼得?
可以实现的那就是 abi split,分包,实现也很简单,在gradle 中添加如下配置:+
android {...defaultConfig {...// 支持的 ABI 列表ndk {abiFilters "x86", "x86_64", "arm64-v8a", "armeabi", "armeabi-v7a"}}...
}
分别打包三个版本,并对每款进行单独apk打包。这样,即能保证兼容问题,⼜能保证性能,⼜能不额外增加APK的⼤⼩,因为可以为所有架构都单独 打⼀个包,⼀举多得。
总结:这对我们进行在不同架构编译SO库,运行程序有深入理解。
理解架构差异:通过学习32位和64位处理器的区别,理解了不同架构对应用性能的影响和兼容性问题。
掌握适配策略:了解了如何根据市场需求和设备分布选择合适的适配方案,平衡性能和兼容性。
实践中的应用:学会了如何在Gradle中配置abiFilters
和abi split
,优化APK的体积和性能。
NDK(Native Development Kit) 本地开发⼯具包
Android NDK 是在SDK前⾯⼜加上了原⽣⼆字,即Native Development Kit,因此⼜被Google称为 NDK。允许使⽤原⽣语⾔(C和C++)来实现应⽤程序的部分功能。给java语言调用
(1)native coder执⾏⾼效:⼤量的运算(极品⻜⻋),万能解码(ffmpeg),Opengl(3D 渲染) (2)通过jni技术,可以扩展Android⼿机的功能-wifi热点
(3)代码的复⽤:ffmpeg, opnencv(⼈脸识别库)
(4)使⽤场景:考虑特殊情况(效率/操作硬件)
库⽂件类型:
linux:静态库.a 动态库.so
windows:动态库.dll
JNI(Java Native Interface)Java本地接⼝
Java Native Interface (JNI) 是一种编程框架,它使得 Java 代码可以调用和被其他语言(如 C 或 C++)编写的本地应用程序和库。JNI 主要用于在 Java 应用程序中集成或使用底层系统功能,或者在需要高性能执行时利用现有的本地代码。
CMake和ndk-build
CMake 和 ndk-build 是用于 Android NDK(Native Development Kit)开发的两种构建系统。
CMake 是一个跨平台的开源构建系统,它使用 CMakeLists.txt 文件来描述项目的构建过程。CMake 支持多种编译器和构建工具,能够生成特定平台的构建文件。
CMake优点
- 跨平台支持:CMake 可以生成适用于不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)。
- 现代化支持:CMake 对 C++11、C++14 等现代 C++ 特性的支持较好。
- 集成 IDE 支持:许多集成开发环境(IDE)如 Android Studio 和 Visual Studio 都原生支持 CMake。
- 模块化:CMake 可以很方便地管理大型项目的依赖和模块。
cmake_minimum_required(VERSION 3.4.1)# 添加库
add_library(native-lib SHARED native-lib.cpp)# 查找 NDK 库
find_library(log-lib log)# 链接库
target_link_libraries(native-lib ${log-lib})
ndk-build 是 Android NDK 自带的构建系统,使用 Android.mk 和 Application.mk 文件来定义构建规则。它是较早的构建工具,专门用于 Android NDK 项目。
ndk-build 优点
- 简单易用:对于小型项目,ndk-build 的使用较为简单直观。
- 集成方便:与 Android Studio 集成良好,能够快速构建和测试 NDK 代码。
- 现有项目兼容性:对已有的 Android NDK 项目,使用 ndk-build 可能更为方便。
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := native-lib
LOCAL_SRC_FILES := native-lib.cppinclude $(BUILD_SHARED_LIBRARY)
选择 CMake 还是 ndk-build
-
项目规模:
- 对于小型项目,ndk-build 可能更简单直接。
- 对于大型项目,CMake 更加灵活和强大,支持更复杂的依赖管理。
-
团队协作:
- 如果团队中有成员熟悉 CMake,建议使用 CMake 以便于协作。
- 如果团队主要使用 ndk-build,继续使用可能更高效。
-
现代化需求:
- CMake 对现代 C++ 特性的支持更好,适合需要使用新特性的项目。
-
IDE 兼容性:
- 如果使用 Android Studio,CMake 是官方推荐的构建系统,提供更好的集成体验。
对于新项目,CMake 通常是更好的选择,而对于已有的 ndk-build 项目,继续使用可能会更方便。
安装android stdio
android stdio就是安卓开发的idm,基本都使用这个。对于刚入门来说不友好,这边建议下载最新版本2024.2,因为内置ai,而且比旧版本更简单使用。
下载 Android Studio 和应用工具 - Android 开发者 | Android Developers
由于大学时期已经安装过android stdio,可以参考下列链接安装选项即可
Android Studio2024版本安装环境SDK、Gradle配置_android-studio-2024.1.2.12-windows.exe-CSDN博客
下载 CMake和ndk-build
首次项目error
原因:没装gradle-8.9包,通过官网拉取又失败,即使开梯子也不行。刚创建时选的java版本导致。我们重新创建项目,环境:android 14.0 api 34 gradle-8.9-bin.zip。跟着步骤走
通过网盘分享的文件:gradle-8.9-bin.zip
链接: https://pan.baidu.com/s/1GzLMctUYZtxX2TerZbpzFQ 提取码: 49kg
--来自百度网盘超级会员v6的分享
下载完拷贝到指定目录下,这是官方默认路劲。使用即可
distributionUrl=file:///C:/Users/xxxxxxx/.gradle/wrapper/dists/gradle-8.9-bin.zip
随后点击代码文件,会自动下载需要模块。这个过程大概5-10分钟
再次同步项目试试。
没报错就没事了。
如何build?
虚拟手机
由于是安卓开发,所以需要虚拟手机,我们使用默认的即可。注意版本适配。
分别是手机列表,手机实体,内置ai软件
代码运行和调试 一些翻译
至此成功运行第一个程序
Gemini ai环境配置
Gemini(Android Studio 的 AI 助手)在中国地区无法直接使用。所以必须使用梯子进行,进行google账号登录验证才能成功。否则会超时。
根据自己梯子软件,选择好本地端口。
最终ai环境搭建成功。
学习资料分享
0voice · GitHub
相关文章:
Android NDK开发实战之环境搭建篇(so库,Gemini ai)
文章流程 音视频安卓开发首先涉及到ffmpeg编译打包动态库,先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。 So库适配 ⽇常开发我们经常会使⽤到第三库,涉及到底层的语⾳,视频等都需要添加so库。⽽so库的体积⼀般来说 ⾮…...
Word中所有的通配符使用方式[Word如何批量删除中文标点符号,英文标点符号,英文字母符号,数字符号,中文汉字符号]
Word中所有的通配符使用方式 概念讲解通配符一览表详细介绍通配符的使用使用通配符搜索简洁通配符链接操作演示链接 概念讲解 Word中的通配符是用在查找和替换中的正则表达式。通配符可以实现高级的查找替换,快速整理和排版文档。常用的通配符包括: “*…...
ElasticSearch内存占用率过高怎么办?
文章目录 1,先用top看看各个进程的内存占用情况2,不能简单的杀死进程,然后再重启。3,查看一下ElasticSearch进程的具体启动情况4,修改Elasticsearch 的Java堆内存 1,先用top看看各个进程的内存占用情况 先…...
svelte5中使用react组件
在svelet5中导入并使用react组件库 svelte5中使用react组件 svelte5中使用react组件 在svelet5中导入并使用react组件库, 示例项目地址:https://github.com/shenshouer/my-svelte-react 在svelte5中当前还有问题,无法将children传递到react中渲染 使用…...
Linux 文件的特殊权限—ACL项目练习
本文为Ubuntu Linux操作系统- 第二十一期~~ 上期回顾: 【ACL权限控制详解】 更多Linux 相关内容请点击👉【Linux专栏】~ 主页:【练小杰的CSDN】 文章目录 项目项目要求具体的设置命令如下问题2问题3第一步:设置默认ACL前,在projec…...
游戏引擎学习第76天
确保一切正常并计划今天的内容 在本次开发中,我们正在集中精力处理引擎中的三维功能,尤其是如何有效地处理多层结构,比如在多个楼层之间行走,或者在房间上方可以看到下方的房间。我们的目标是避免使用临时解决方案或黑客方式&…...
【Linux-多线程】POSIX信号量-基于环形队列生产消费模型
POSIX信号量 POSIX信号量和System V信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源的目的。但POSIX可以用于线程间同步 1.快速认识信号量接口 POSIX信号量分为两种类型: 命名信号量(Named Semaphores)&…...
电脑32位和64位之区别(Difference between 32-Bit and 64 Bit Computers)
电脑32位和64位之区别 很多小伙伴还不知道电脑32位和64位是什么意思,今天小编就来普及一下。 32位和64位是指电脑处理器(CPU)和操作系统的架构,决定了电脑如何处理数据、存储信息、运行程序等。 32位和64位是指电脑系统中每个处…...
1688平台商品关键词搜索的多样性与Python爬虫应用实践
在当今这个信息化、数字化飞速发展的时代,电子商务平台已经成为人们日常生活中不可或缺的一部分。而1688作为国内知名的B2B电商平台,凭借其庞大的商品种类和丰富的供应链资源,为无数商家和消费者提供了便捷的交易渠道。除了广受关注的女装品类…...
2025年:AI化浪潮中的社会变迁与商业革新
随着人工智能(AI)技术的迅猛发展,2025年将成为一个转折点。这一年,AI不仅将深入到日常生活和商业运营的各个角落,还将引发一系列深刻的社会、经济和技术变革。以下是对未来一年可能出现的“AI化”现象的预测与展望。 AI进入主流文化的标志 超级碗广告:在2025年的超级碗上…...
JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...
精选2款.NET开源的博客系统
前言 博客系统是一个便于用户创建、管理和分享博客内容的在线平台,今天大姚给大家分享2款.NET开源的博客系统。 StarBlog StarBlog是一个支持Markdown导入的开源博客系统,后端基于最新的.Net6和Asp.Net Core框架,遵循RESTFul接口规范&…...
1.CSS的复合选择器
1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基础选择器进行组合形成的。 复合选择器可以更精准、更高效的选择目标元素(标签) 复…...
sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的详细信息(客户端ip)
文章目录 引言I 基于dm_exec_connections查询客户端ip权限物理联接时间范围dm_exec_connections表see also: 监视SQL Server 内存使用量资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)引言 查询历史数据库客户端ip应用场景: 安全分析缺乏…...
gitee 使用教程
前言 Gitee 是一个中国的开源代码托管平台,类似于 GitHub,旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议,可以托管 Git 仓库,进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…...
HTMLHTML5革命:构建现代网页的终极指南 - 0. 课程目录设计
结构清晰,层层递进 课程从基础知识(如HTML学前必知)开始,逐步深入到高级应用(如PWA配置和WebApp优化)。每个模块都有明确的目标,适合零基础学员逐步掌握HTML。 覆盖范围广 这套课程涵盖了HTM…...
嵌入式系统 (2.嵌入式硬件系统基础)
2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…...
Vue3轮播图的实现:vue3-carousel的使用和配置
vue3-carousel 是一个用于 Vue 3 的轻量级、响应式、功能强大的轮播组件。它允许你轻松创建可以滚动的图片或内容滑块。下面是关于如何安装、使用以及配置 vue3-carousel 的一些示例和详细说明。 目录 一、安装 vue3-carousel 二、引入 三、轮播全局样式修改 一、安装 vue3-…...
Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...
uniapp vue2版本如何设置i18n
如何设置i18n在该软件设置过语言的情况下优先选择所设置语言,在没有设置的情况下,获取本系统默认语言就,将系统默认语言设置为当前选择语言。 1、下载依赖: npm install vue-i18n --save 2、创建相关文件(在最外层&…...
【2024华为OD-E卷-100分-boss的收入】(题目+思路+JavaC++Python解析)
题目描述 题目:boss的收入 在一个公司中,有一个老板(boss)和若干名员工(employees)。老板和员工的收入信息存储在一个数组中,其中数组的每个元素表示一个人的收入。数组的第0个元素表示老板的…...
若依 ruoyi-vue HandlerInterceptor 拦截器 文件接口自定义权限
文件资源添加自定义权限 package com.huida.framework.config;import com.huida.framework.interceptor.FileInterceptor; import com.huida.framework.interceptor.RequestInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springfr…...
在离线环境中安装 `.rpm` 包的步骤
在一些环境中,可能无法直接通过网络安装软件包。特别是在没有互联网连接的情况下,我们仍然可以手动下载 .rpm 安装包并进行离线安装。本文将介绍如何在离线环境中安装多个 .rpm 包,确保软件的顺利安装和依赖关系的处理。 1. 将 .rpm 文件复制…...
Python----Python爬虫(selenium的使用,定位元素,层级定位)
一、介绍与安装 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器。 Sele…...
Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)
Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台,能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令,帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前,…...
当歌 - RSS 订阅分发平台开发
以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...
vue3使用AntV X6 (图可视化引擎)历程[二]
通过h函数动态展示自定义节点内容 一、案例效果 二、案例代码 父组件. BloodTopology.vue <template><div><TopologyCompact><template #main-board-box><TopologyDependent domId"featureBloodContainer" :nodeData"originalNode…...
爬虫学习记录
1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…...
Erlang语言的函数实现
Erlang语言函数实现的深度探讨 引言 Erlang是一种并发编程语言,最初由爱立信公司为电信系统开发。它以其强大的并发处理能力和容错机制而闻名,广泛应用于实时系统和分布式系统。本文将详细探讨Erlang语言中的函数实现,包括函数的定义、调用…...
LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库
一、必备条件: python语言Neo4j数据库python库:neo4j、llmsherpa、glob、dotenv 二、代码: from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...
单例模式-如何保证全局唯一性?
以下是几种实现单例模式并保证全局唯一性的方法: 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数,防止外部创建对象Singleton() {}// 静态成员变量,存储单例对象static Singleton instance; public:// 公有静态成员函数&…...
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
Docker学习,常用安装:Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...
docker 启动redis 守护进程
文章目录 前言一、整体流程二、状态图三、结语 前言 在现代软件开发中,缓存和消息队列是提高应用性能和扩展性的关键。Redis 是一种流行的内存数据结构存储系统,它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。使用 Doc…...
Angular由一个bug说起之十三:Cross Origin
跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样࿰…...
为深度学习引入张量
为深度学习引入张量 什么是张量? 神经网络中的输入、输出和转换都是使用张量表示的,因此,神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…...
opencv摄像头标定程序实现
摄像头标定是计算机视觉中的一个重要步骤,用于确定摄像头的内参(如焦距、主点、畸变系数等)和外参(如旋转矩阵和平移向量)。OpenCV 提供了方便的工具来进行摄像头标定。下面分别给出 C 和 Python 的实现。 1. C 实现…...
Flutter:封装一个自用的bottom_picker选择器
效果图:单列选择器 使用bottom_picker: ^2.9.0实现,单列选择器,官方文档 pubspec.yaml # 底部选择 bottom_picker: ^2.9.0picker_utils.dart AppTheme:自定义的颜色 TextWidget.body Text() <Widget>[].toRow Row()下边代…...
Docker 容器自动化管理之脚本(Script for Docker Container Automation Management)
Docker 容器自动化管理之脚本 简介 Docker是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其依赖项打包到一个可移植的容器中,使得开发人员能够在不同的环境中以一致的方式构建、打包和分发应用程序。 Docke…...
client-go中watch机制的一些陷阱
Reference https://stackoverflow.com/questions/51399407/watch-in-k8s-golang-api-watches-and-get-events-but-after-sometime-doesnt-get-an 问题描述 最近在使用 client-go 的 watch 机制监听 k8s 中的 deployment 资源时,发现一个奇怪的现象 先看下代码&a…...
用户界面的UML建模11
然而,在用户界面方面,重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此,《exception》类能够聚合《boundary》类。 参见图12,《exception》Database…...
计算机网络之---数据链路层的功能与作用
数据链路层概念 数据链路层(Data Link Layer)是计算机网络中的第二层,它位于物理层和网络层之间,主要负责数据在物理链路上的可靠传输。其基本功能是将网络层传来的数据分成帧,并负责在物理链路上可靠地传输这些数据帧…...
添加到 PATH 环境变量中
命令解释 # 将命令中的<CLI_PATH>替换为您aliyun文件的所在目录。 echo export PATH$PATH:<CLI_PATH> >> ~/.bash_profile echo export PATH$PATH:/data2/ljsang/aliyun/aliyun >> ~/.bash_profileexport PATH$PATH:/data2/ljsang/aliyun/aliyun&…...
【51单片机零基础-chapter6:LCD1602调试工具】
实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...
Linux 内核中的 netif_start_queue 函数:启动网络接口发送队列的关键
在 Linux 内核的网络子系统中,netif_start_queue 函数扮演着至关重要的角色。这个函数的主要功能是启动(或启用)网络接口的发送队列,标志着网络接口已经准备好开始发送数据包。本文将深入探讨 netif_start_queue 函数的用途、工作原理以及在实际网络驱动代码中的应用。 函…...
(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗?或者被抖音的人脸特效逗乐的瞬间?这些有趣的应用背后,其实藏着一个精妙的AI世界。今天,就让我们开启一段奇妙的人脸识别技术探索之旅吧! 一、人脸识…...
ExcelDataReader:一个.Net高性能Excel开源读取器
推荐一个用于读取Microsoft Excel文件的高性能开源库。 01 项目简介 ExcelDataReader是一个功能强大且易于使用的开源项目,提供了丰富的读取API,专门读取Excel文件的数据,特别是处理大数据量的情况。 ExcelDataReader支持Excel版本从2007年…...
人工智能-机器学习之多元线性回归(项目实践一)
目标:运用scikit-learn进行多元线性回归方程的构建,通过实际案例的训练集和测试集进行预测,最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn:pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…...
Mysql--基础篇--约束(主键,外键,唯一,检查,枚举及复合约束等)
在MySQL中,约束(Constraints)是用于确保数据库中数据完整性和一致性的规则。通过定义约束,可以防止用户插入、更新或删除不符合特定条件的数据,从而保证数据的准确性和可靠性。MySQL支持多种类型的约束,每种…...
经典多模态模型CLIP - 直观且详尽的解释
对比语言-图像预训练(CLIP),这是一种创新的多模态建模策略,能够创建视觉和语言的联合表示。CLIP 的效果非常出色,可以用于构建高度特定且性能卓越的分类器,而无需任何训练数据。本文将深入探讨其理论基础&a…...
着丝粒鉴定CentIER v3.0安装与使用-bioinfomatics tools41
使用CentIE鉴定着丝粒 T2T基因组端粒与着丝粒的区别及其鉴定方法-随笔02_chip-seq鉴定着丝粒-CSDN博客 T2T时代的基因组组装-文献精读-9_基因组t2t组装-CSDN博客 桑树T2T基因组-文献精读16_桑树基因组-CSDN博客 辣椒属2个T2T基因组-文献精读23_辣椒基因组-CSDN博客 大花…...