QT交叉编译环境配置

QT交叉编译环境配置

  • 1 配置交叉编译工具链
    • 1.1 解压 放到`/opt`中
    • 1.2 使用环境变量
      • 1.2.1 设置成永久的环境变量
      • 1.2.2 临时环境变量
    • 1.3 安装编译需要的软件
  • 2 编译tslib库(如果不需要触摸屏直接跳过)
  • 3. 编译qt
    • 3.1 编译源码
    • 3.2 设置QCreator
  • 4 说明
    • 4.1 关于编译器名字的区别
    • 4.2 如果 mkspecs 目录中没有你用的编译器怎么办?
    • 4.3 QT各个模块的作用

如果遇到疑问,看看第4章 说明中有没有能解决你疑惑的答案

1 配置交叉编译工具链

我使用的是gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/

1.1 解压 放到/opt

sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt

1.2 使用环境变量

export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlib

1.2.1 设置成永久的环境变量

sudo vim ~/.bashrc # 打开设置环境变量
#将1.2的内容复制到文件末尾
source ~/.bashrc #使环境变量生效或者#多用户生效
sudo vim /etc/profile
source /etc/profile

1.2.2 临时环境变量

方式一:
打开命令窗口,将1.2内容复制到里面运行
方式二:
创建set_arm_env.sh文件,将下面内容复制进去

#!/bin/bash
export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlib

执行chmod +x set_arm_env.shsource set_arm_env.sh

验证方式:
aarch64-linux-gnu-gcc -v

echo “CC=$CC”

1.3 安装编译需要的软件

sudo apt update
sudo apt install perl
sudo apt install python3 #或者python2
sudo apt-get install autoconf automake libtool

2 编译tslib库(如果不需要触摸屏直接跳过)

tslib 是一个用于 触摸屏输入事件校准和处理 的轻量级开源库,常用于 嵌入式 Linux 系统 上的电阻式或电容式触摸屏。
作用:

  1. 处理触摸屏原始坐标数据
  2. 进行触摸校准(calibration)
  3. 消除触摸漂移、误差
  4. 提供统一的触摸事件接口(/dev/input/eventX)
#下载
git clone https://gitee.com/mqinglang/tslib.git
cd tslib
./autogen.sh
./configure --host=aarch64-linux-gnu ac_cv_func_malloc_0_nonnull=yes --cache-file=aarch64-linux.cache -prefix=/home/mql/qt_src/arm64_linux_gnu/tslib
make -j$(nproc)
make install

3. 编译qt

3.1 编译源码

我使用的是qt5.15.2。你在源码中qt-everywhere-src-5.15.2/qtbase/mkspecs这个路径下面会看到各个平台的编译配置文件,我用的是arm64-linux-gnu这里面已经包含了这个编译器的编译配置如图:
在这里插入图片描述
在这里插入图片描述
qmake.conf里面是编译配置:
在这里插入图片描述

  • 详细解释如下
#这是注释,说明此配置是针对 aarch64-linux-gnu-g++ 交叉编译器的。
# qmake configuration for building with aarch64-linux-gnu-g++ 
# 指定生成的 Makefile 格式是 Unix 风格。
MAKEFILE_GENERATOR      = UNIX
# 这是增量构建的设置,incremental 表示支持增量链接(部分模块重编译);
# sublib 说明增量编译模式按子库为单位。
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
# 引入 Qt 提供的通用 Linux + GCC 配置。
# 这些 conf 文件位于 qtbase/mkspecs/common/ 下,封装了 GCC 编译选项和 Linux 系统默认参数。
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# 指定交叉编译所使用的编译器为 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++
# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++
# 设置归档工具(生成 .a 静态库)等。用于构建时压缩/提取符号:
# modifications to linux.conf
QMAKE_AR                = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
QMAKE_NM                = aarch64-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-linux-gnu-strip
  • 变量名 含义
    QMAKE_CC C 编译器
    QMAKE_CXX C++ 编译器
    QMAKE_LINK 链接器(C++)
    QMAKE_LINK_SHLIB 动态库链接器(C++)
    QMAKE_AR 静态库打包工具
    QMAKE_OBJCOPY 对目标文件进行复制、符号剥离等操作
    QMAKE_NM 显示目标文件符号表
    QMAKE_STRIP 剥离调试信息/符号表
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
# 解压
tar -xf qt-everywhere-src-5.15.2.tar.xz
cd qt-everywhere-src-5.15.2/

创建一个脚本qtsrc.sh,记得将里面的路径修改成你自己对应的,然后加执行权限

#!/bin/bashecho "设置交叉编译工具链环境变量..."
export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlibecho "设置 TSLIB 相关路径..."
export TSLIB_ROOT=/home/mql/qt_src/arm64_linux_gnu/tslib
export PKG_CONFIG_SYSROOT_DIR=$SYSROOT
export PKG_CONFIG_PATH=$TSLIB_ROOT/lib/pkgconfig
export TSLIB_INCLUDE_DIR=$TSLIB_ROOT/include
export TSLIB_LIBRARY_DIR=$TSLIB_ROOT/libecho "开始执行 Qt configure 配置..."
./configure \-prefix /home/mql/qt_src/arm64_linux_gnu/qt5.15.2 \-release \-opensource -confirm-license \-optimized-qmake \-shared \-xplatform linux-aarch64-gnu-g++ \-pch \-c++std c++11 \-linuxfb \-tslib \-qt-zlib \-qt-pcre \-qt-freetype \-qt-harfbuzz \-qt-libpng \-qt-libjpeg \-qt-sqlite \-plugin-sql-sqlite \-gui -widgets -dbus-runtime \-no-openssl \-no-xcb \-no-opengl \-nomake tests \-nomake examples \-recheck-all \-I $TSLIB_INCLUDE_DIR \-L $TSLIB_LIBRARY_DIR \-skip qtnetworkauth \-skip qtwebsockets \-skip qtwebchannel \-skip qtscript \-skip qtwebengine \-skip qtwebview \-skip qtlocation \-skip qtremoteobjects \-skip qtpurchasing \-skip qtactiveqt \-skip qtwinextras \-skip qtx11extras \-skip qtmacextras \-skip qtandroidextras \-skip qtgamepad \-skip qt3d \-skip qtdatavis3d \-skip qtquick3d \-skip qtgraphicaleffects \-skip qtquickcontrols \-skip qtquickcontrols2 \-skip qtquicktimeline \-skip qtlottie \-skip qtsensors \-skip qtspeech \-skip qtdoc \-skip qtwebglpluginecho " configure 配置完成,请检查是否有错误信息。"
echo "接下来可以执行 make -jN 进行编译,例如:make -j$(nproc)"

编译安装

make -j$(nproc)
make install

内容如下
在这里插入图片描述

编译参数说明:

# 查看所有参数以及使用方法
./configure -h # 进入到源码根目录(cd qt-everywhere-src-5.15.2),查看模块名字
ls qt*/ | grep -E '^qt'

3.2 设置QCreator

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
在这里插入图片描述
在这里插入图片描述

4 说明

4.1 关于编译器名字的区别

以gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu为例:

部分含义
gccGNU 编译器套件(GNU Compiler Collection)
linaroLinaro 组织维护的版本,专为 ARM 平台优化
7.5.0GCC 的主版本号,是 gcc 7 系列,支持 C++11
2019.12工具链构建的版本时间(2019年12月发布)
x86_64构建主机架构(host),即你用这个工具链的机器(通常是 x86_64 架构的 PC)
aarch64-linux-gnu目标架构(target),说明这套工具链是用来生成 aarch64(ARM64)Linux 程序的
  • aarch64-linux-gnu

是目标系统(Target triple)的三个部分:

部分说明
aarch64目标 CPU 架构(ARMv8,64 位)
linux目标操作系统
gnu使用的是 glibc 运行时(不是 uClibc 或 musl)

你在官网可能开看到了以下诸多编译器名字,又有什么区别:

aarch64-elf			
aarch64-linux-gnu			
aarch64_be-elf			
aarch64_be-linux-gnu			
arm-eabi			
arm-linux-gnueabi			
arm-linux-gnueabihf			
armeb-eabi			
armeb-linux-gnueabi			
armeb-linux-gnueabihf		
armv8l-linux-gnueabihf
名称架构OSC库浮点支持字节序用途
aarch64-elfARM64裸机-小端裸机开发、bootloader
aarch64-linux-gnuARM64Linuxglibc支持小端主流 编译架构
aarch64_be-linux-gnuARM64Linuxglibc支持大端非常少见
arm-linux-gnueabiARM32Linuxglibcsoft-float小端较老系统,性能差
arm-linux-gnueabihfARM32Linuxglibc硬浮点小端Raspberry Pi、嵌入式主流
arm-eabiARM32裸机newlib小端MCU开发(如 STM32)
armeb-linux-gnueabihfARM32Linuxglibc硬浮点大端很少用
armv8l-linux-gnueabihfARMv8 (32位)Linuxglibc硬浮点小端Raspberry Pi(32位系统)

4.2 如果 mkspecs 目录中没有你用的编译器怎么办?

假设你正在用的是 csky-abiv2-ux-linuxv3615 工具链,而 mkspecs/ linux-csky-ux-g++不存在怎么办?你可以手动创建它:

  • 第一步:准备交叉工具链路径(假设)

/usr/local/arm/csky-abiv2-ux-linuxv3615/

├── bin/
│   ├── csky-linux-uclibcabiv2-gcc
│   ├── csky-linux-uclibcabiv2-g++
│   ├── csky-linux-uclibcabiv2-ar
│   └── ...
├── libc/
├── include/
└── ...
  • 第二步:创建 Qt 的 mkspec 平台目录
cd ~/qt_src/qt-everywhere-src-5.15.2/qtbase/mkspecs
cp -r linux-arm-gnueabi-g++ linux-csky-ux-g++

如果没有 linux-arm-gnueabi-g++,可以复制任意近似平台的 mkspec,例如 linux-g++,然后改名。

  • 第三步:编辑 linux-csky-ux-g++/qmake.conf
    用你实际的编译器前缀(如 csky-linux-uclibcabiv2-)修改内容如下:
# qmake configuration for building with csky-linux-uclibcabiv2-g++MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)# 交叉编译器
QMAKE_CC                = csky-linux-uclibcabiv2-gcc
QMAKE_CXX               = csky-linux-uclibcabiv2-g++
QMAKE_LINK              = csky-linux-uclibcabiv2-g++
QMAKE_LINK_SHLIB        = csky-linux-uclibcabiv2-g++# 工具链工具
QMAKE_AR                = csky-linux-uclibcabiv2-ar cqs
QMAKE_OBJCOPY           = csky-linux-uclibcabiv2-objcopy
QMAKE_NM                = csky-linux-uclibcabiv2-nm -P
QMAKE_STRIP             = csky-linux-uclibcabiv2-stripload(qt_config)
  • 第四步:配置 Qt 的 configure 脚本时使用它
    你的配置脚本中的平台参数应修改为:
    -xplatform linux-csky-ux-g++

环境变量也对应的修改

4.3 QT各个模块的作用

按需选择编译

模块名功能说明是否建议保留
qtbaseQt 的核心模块,包含 QtCore、QtGui、QtWidgets✅必须保留
qtdeclarativeQML 与 QtQuick 引擎支持⚠️可选
qttoolsQt 工具链(如 lupdate, designer 等)⚠️可选
qtserialport串口支持⚠️可选
qtsvgSVG 图像支持⚠️可选
qtmultimedia音视频播放、摄像头等⚠️可选
qtcharts图表控件⚠️可选
qtnetworkauthOAuth 授权支持❌可跳过
qtconnectivity蓝牙、NFC 等❌可跳过
qtserialbusCAN、Modbus 等总线通信支持⚠️可选
qtwebsocketsWebSocket 通信支持⚠️可选
qtwebchannelWeb 与 Qt 通信桥接(QWebChannel)⚠️可选
qtimageformats额外图像格式支持,如 tiff/webp/mng⚠️可选
qtxmlpatternsXML/XPath/XQuery 处理❌可跳过
qtscxml状态机 XML 支持❌可跳过
qtscriptQtScript 支持(已废弃)❌强烈建议跳过
qtwebengineChromium 内核浏览器支持,依赖重❌建议跳过
qtwebview嵌入浏览器控件❌建议跳过
qtlocation地图与定位服务❌可跳过
qtremoteobjects分布式对象(远程调用)❌可跳过
qtpurchasing应用内购买支持❌可跳过
qtactiveqt与 ActiveX 交互,仅用于 Windows❌可跳过
qtwinextrasWindows 特有控件与特性支持❌可跳过
qtx11extrasX11 特性封装,适用于 X11 环境❌可跳过
qtmacextrasmacOS 特性封装❌可跳过
qtandroidextrasAndroid 平台特性支持❌可跳过
qtgamepad游戏手柄支持❌可跳过
qt3d3D 图形支持❌可跳过
qtdatavis3d三维数据图表❌可跳过
qtquick3dQt Quick 3D 模块❌可跳过
qtvirtualkeyboard虚拟键盘(触摸屏键盘)⚠️可选
qtgraphicaleffectsQML 图形特效模块⚠️可选
qtquickcontrols / qtquickcontrols2QML 控件⚠️可选
qtquicktimeline时间轴动画控制模块⚠️可选
qtlottie播放 Lottie 动画 JSON⚠️可选
qtsensors传感器支持❌可跳过
qtspeech文本转语音支持❌可跳过
qtdocQt 文档模块,不影响功能❌建议跳过
qttranslations多语言翻译文件❌建议跳过
qtwebglpluginWebGL 插件(浏览器用)❌建议跳过

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

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

相关文章

【Android】【Java】一款简单的文本/图像加解密APP

写在前面 之前写过一篇博客,名为《【Java编程】【计算机视觉】一种简单的图片加/解密算法》,介绍了用Java在电脑上对图片进行简单的加密和解密操作,见链接: 文章链接 但是,文中所描述的算法在实际操作当中,存在严重的噪音(图像失真)的问题(且原因不明),本次经笔者研…

技术笔记 | Ubuntu 系统 OTA 升级全流程详解

前言:在嵌入式系统设备管理中,OTA(Over-The-Air)升级是实现设备远程维护、功能迭代的核心能力。本文基于 Ubuntu 系统环境,详细拆解 updateEngine 工具的 OTA 升级方案,从配置开启、命令使用到实战案例与问…

重复请求问题

重复请求问题 使用Promise和AbortController来实现思路是:通过在会话缓存中存储和比较请求信息,来防止用户在短时间内重复提交相同的请求。 具体思路如下: 存储请求信息:每次请求时,将请求的相关信息(如URL…

CentOS7 Docker安装RocketMQ完整教程

目录 前言 环境准备 系统要求 检查Docker状态 创建网络和目录 创建Docker网络 创建数据目录 安装NameServer 启动NameServer容器 参数说明 验证NameServer启动 安装Broker 创建Broker配置文件 启动Broker容器 参数说明 验证Broker启动 安装管理控制台 启动控制…

main函数,常量指针与指针常量,野指针等,void与void的区别

指针(续) main函数原型 定义 main函数有多种定义格式,main函数也是函数,函数相关的结论对main函数也有效。 main函数的完整写法:int main(int argc, char *argv[]){..}int main(int argc, char **argv){..}扩展写法&am…

Mac m系列芯片安装node14版本使用nvm + Rosetta 2

由于苹果 M 系列芯片(包括 M4)使用的是 ARM 架构,而 Node.js 14 是在英特尔 x86 架构时代发布的,因此在 M 系列 Mac 上安装 Node.js 14 可能会遇到兼容性问题 解决方法:使用 nvm Rosetta 2右键点击「终端」→「显示简…

前端基础之《Vue(26)—Vue3两种语法范式》

一、选项式1、HTML写法<!-- 跟 Vue 说 Hello World&#xff01; --><script type"module"> import { createApp } from vuecreateApp({data() {return {message: Hello World!}} }).mount(#app) </script><div id"app"><h1>…

题目:BUUCTF之rip(pwn)

网址 BUUCTF在线评测https://buuoj.cn/challenges#rip打开&#xff0c;如图所示 提示&#xff1a;先别启动靶机&#xff0c;靶机可以最后在启动&#xff0c;先分析下载的附件pwn1。 点击下载&#xff0c;下载完成之后&#xff0c;该文件后缀类型改为exe&#xff08;就是将pwn…

el-button长按触发事件(含未响应的解决方案)

参考代码实现按钮长按触发逻辑 <template><el-button mousedown"handleMouseDown" mouseup"handleMouseUp">长按我</el-button> </template>data(){return{isPressed: false,timer: null,}},methods:{handleMouseDown() {this.isP…

List和 ObservableCollection 的区别

1. 变更通知机制​​ ​​ObservableCollection<T>​​ 实现了INotifyCollectionChanged和INotifyPropertyChanged接口&#xff0c;当集合元素被添加、删除、替换或重置时&#xff0c;会自动触发CollectionChanged事件&#xff0c;通知绑定的UI控件更新&#xff08;如WPF…

支付宝沙箱(白屏,用户订单参数错误等)

情况&#xff1a;Laravel项目的line 对接 支付宝沙箱测试 手机网站支付 1&#xff1a;沙箱地址&#xff0c;小到我找不到&#xff1a;沙箱应用 - 开放平台 2&#xff1a;虽然提供了系统密钥&#xff0c;但是只是测API链接的&#xff0c;要沙箱测试转账什么的&#xff0c;得用…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博评论IP地图可视化分析实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博评论IP地图可视化分析实现 视频在线地…

【代码随想录】刷题笔记——二叉树篇

目录 144. 二叉树的前序遍历 94. 二叉树的中序遍历 145. 二叉树的后序遍历 102. 二叉树的层序遍历 226. 翻转二叉树 101. 对称二叉树 104. 二叉树的最大深度 111. 二叉树的最小深度 222. 完全二叉树的节点个数 110. 平衡二叉树 257. 二叉树的所有路径 404. 左叶子之…

基于deepseek的文本解析 - 超长文本的md结构化

pdf超长合同或其他超100页非结构化文档&#xff0c;很难全量提交deepseek进行分析&#xff0c;一般需要先进行分割。然而&#xff0c;不管是langchain还是llamaindex提供的文本分割工具&#xff0c;很难直接对非结构化文本进行准确的内容分割&#xff0c;很多原始整体段落被划分…

介绍一个图像修复开源项目,从模糊到清晰仅需1.7秒:HYPIR图像修复技术如何改变数字世界?

文章概要 作为一名长期关注图像处理技术的爱好者&#xff0c;当我第一次接触到HYPIR这一革命性图像修复工具时&#xff0c;我被其惊人的速度和质量所震撼。本文将全面介绍由中国科学院深圳先进技术研究院董超研究员团队研发的HYPIR图像修复大模型&#xff0c;详细解析其核心技术…

基于UDP的SNMP协议

SNMP协议详解 SNMP (Simple Network Management Protocol)&#xff0c;“简单网络管理协议”&#xff0c;是广泛应用于TCP/IP网络中&#xff0c;用于管理和监控网络设备的一种标准协议。它允许网络管理员查询网络设备的状态信息、配置参数、接收故障告警等&#xff0c;从而实现…

3D空间中的变换矩阵

3D 空间中的变换矩阵详解 在 3D 计算机图形学中&#xff0c;所有几何变换都可以通过 44 齐次变换矩阵 来表示。以下详细介绍各种变换矩阵及其原理。 核心变换矩阵 1. 单位矩阵&#xff08;不变变换&#xff09; I[1000010000100001] I \begin{bmatrix} 1 & 0 & 0 &…

长连接(Long Connection)详解

一、长连接基本概念长连接&#xff08;也称为持久连接&#xff09;是指在一个TCP连接上可以连续发送多个HTTP请求/响应&#xff0c;而不是每次通信都建立新的连接。这是HTTP/1.1的默认行为&#xff0c;通过Connection: keep-alive头部实现。二、工作原理1. 传统短连接流程客户端…

【汇总】接口自动化测试 + 持续集成(文末视频演示)

技术栈&#xff1a;java testng httpclient allure fastjson jsonpath poi/yaml log4j 有建议请联系wx&#xff1a;ren168632201 java接口自动化系列(01)&#xff1a;自动化测试框架设计(入门版) java接口自动化系列(02)&#xff1a;测试数据文件设计(excel/yam) java接…

科研快报 |无人机+AI:广东防控基孔热背后的技术革命

Prism Path 科 研 快 报 CS跨学科顶尖期刊论文资讯 -NO.2025001- 人工智能在登革热预防、控制与管理中的作用&#xff1a;一项技术性叙述综述 The role of artificial intelligence for dengue prevention, control, and management: A technical narrative review 期刊…