【Matter】基于Ubuntu 22.04 交叉编译chip-tool
编译工程之际,记录一下编译过程,免得后续遗忘,总结下来chip-tool 交叉编译涉及到的知识点:
- 需要了解如何支持交叉编译,基于GN编译框架
- 需要理解应用库如何交叉编译,理解pkg-config的使用
- meson 编译(主要是编译glib 用到)
工具链准备

应该知道,交叉编译用到的编译链接库、包含头文件路径都应该是工具链可以默认可以搜索到的路径。
可以利用下面命令查看
echo 'main(){}' | arm-buildroot-linux-gnueabi-gcc -E -v -
经过试验输出如下:
Using built-in specs.
COLLECT_GCC=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/bin/arm-buildroot-linux-gnueabi-gcc.br_real
Target: arm-buildroot-linux-gnueabi
Configured with: ./configure --prefix=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32 --sysconfdir=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/etc --enable-static --target=arm-buildroot-linux-gnueabi --with-sysroot=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --with-gmp=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32 --with-mpc=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32 --with-mpfr=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32 --with-pkgversion='Buildroot 2019.11.1' --with-bugurl=http://bugs.buildroot.net/ --disable-libquadmath --enable-tls --enable-threads --with-isl=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32 --with-float=soft --with-abi=aapcs-linux --with-cpu=cortex-a9 --with-float=soft --with-mode=arm --enable-languages=c,c++ --with-build-time-tools=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/bin --enable-shared --disable-libgomp
Thread model: posix
gcc version 9.2.0 (Buildroot 2019.11.1)
COLLECT_GCC_OPTIONS='-Os' '-pipe' '-E' '-v' '-mcpu=cortex-a9' '-mfloat-abi=soft' '-mabi=aapcs-linux' '-marm' '-mtls-dialect=gnu' '-march=armv7-a+mp+sec'/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/libexec/gcc/arm-buildroot-linux-gnueabi/9.2.0/cc1 -E -quiet -v -isysroot /opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot - -mcpu=cortex-a9 -mfloat-abi=soft -mabi=aapcs-linux -marm -mtls-dialect=gnu -march=armv7-a+mp+sec -Os
ignoring nonexistent directory "/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/local/include"
#include "..." search starts here:
#include <...> search starts here:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/include/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/include-fixed/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/../../../../arm-buildroot-linux-gnueabi/include/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "<stdin>"
main(){}
COMPILER_PATH=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/libexec/gcc/arm-buildroot-linux-gnueabi/9.2.0/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/libexec/gcc/arm-buildroot-linux-gnueabi/9.2.0/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/libexec/gcc/arm-buildroot-linux-gnueabi/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/../../../../arm-buildroot-linux-gnueabi/bin/
LIBRARY_PATH=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/lib/gcc/arm-buildroot-linux-gnueabi/9.2.0/../../../../arm-buildroot-linux-gnueabi/lib/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/lib/:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/lib/
COLLECT_GCC_OPTIONS='-Os' '-pipe' '-E' '-v' '-mcpu=cortex-a9' '-mfloat-abi=soft' '-mabi=aapcs-linux' '-marm' '-mtls-dialect=gnu' '-march=armv7-a+mp+sec'
通过以上打印,可以看到
#include "..." search starts here:
#include <...> search starts here:
指向了默认头文件的搜索路径,这里貌似看不到链接库路径,(为此后需要设置链接库路径埋下伏笔)
交叉编译脚本
先说下结果,编译用的是32位工具链,使用的编译命令是
./scripts/examples/gn_build_example.sh examples/chip-tool/ out/bcm6756 'target_cpu="arm" target_os="linux"'
脚本里编译大概分俩类,标准编译以及自定义编译,
diff --git a/build/toolchain/linux/BUILD.gn b/build/toolchain/linux/BUILD.gn
index abc61ab2bf..7eb20fbbf6 100644
--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -49,7 +49,7 @@ gcc_toolchain("linux_x86_clang") {}gcc_toolchain("linux_arm_gcc") {1. _toolprefix = "arm-linux-gnueabihf-"2. _toolprefix = "/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/bin/arm-buildroot-linux-gnueabi-"cc = "${_toolprefix}gcc"cxx = "${_toolprefix}g++"
可以看到,这里直接修改了基于32位平台的工具链,最好的办好是自己增加一个custom 工具链,关于custom工具链支持,后续正式项目采用
交叉编译脚本解读
./scripts/examples/gn_build_example.sh examples/chip-tool/ out/bcm6756 'target_cpu="arm" target_os="linux"'

以connectedhomeip 作为主目录,编译的入口是 ./build/coinfig/BUILDCONFIG.gn,这个是GN编译框架规定的,可以参照最简单的GN编译理解,框架是一样的。

上图原文链接:https://pingzhou.site/notes/gn_101.html
比较清晰的展示目录结构,帮助理解。基本分析了下SDK的编译,因为matter协议可以理解为跨平台的应用,所以编译目录结构以及功能上进行了模块话处理,可以通过import 导入一个文件变量,类似于C语言中的include 函数,而且定义了template,类似于C语言中的函数,可以细化管理整个编译命令。
为了帮助理解编译,可以通过print() 函数打印变量值
依赖库编译
先说一下结论,主要是依赖openssl 和glib库,如果之前编译过glib库就会知道,glib库有自己的依赖,比如zlib库以及libffi库。
准备交叉编译,库安装目录:
/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/
openssl 交叉编译
1.代码clone 使用的是openssl-1.1.1l.tar.gz
2.解压、编译
./config no-asm shared --prefix=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr --cross-compile-prefix=arm-buildroot-linux-gnueabi-
–prefix 指定了编译安装目录 --cross-compile-prefix 指定工具链信息
3.修改Makefile
去掉m64相关
4.make
5.sudo make install
glib库交叉编译
代码中编译使用glib2.45.1版本的是不行的,会报函数G_SOURCE_FUNC找不到

因为交叉编译的库,都应该来自于自己编译的库文件,所以我搜索了下glib2.45.1源码中是没有该函数定义的,所以找不到,之后下载了glib2.76.0,搜索后发现能找到函数定义,于是重新编译了库,后面就没再报这个错误了。
glib库2.6以上就采用了meson编译,所以需要熟悉一下meson的编译,跑一下简单历程,熟悉下用法,glib2.76.0库,有一个好处是会自己下载依赖库,不用像glib2.45.1 需要手动安装依赖
需要注意的是meson install 安装时可能会报错,提示
Meson build error "ModuleNotFoundError: No module named 'mesonbuild'"
这里是meson安装出问题了,不能用普通用户权限,必须sudo 权限下安装,卸载掉超级用户权限安装meson即可
参考链接:https://askubuntu.com/questions/1225195/meson-build-error-modulenotfounderror-no-module-named-mesonbuild
glib2.76.0编译,在源码目录里新建一个脚本build.sh,执行,会自动编译,亲测可用。最后是手动安装的sudo meson install
#!/bin/bash
set -eDEVEL=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/if [ -d _build ];then
rm -r _build
fi
mkdir _buildarch='arm-buildroot-linux-gnueabi-'
sys_root='/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot'
#创建交叉编译配置文件cross_file.txt#还可设置c_args等等类似 CFLAGS
echo "[constants]" > cross_file.txt
echo "arch = '${arch}'" >> cross_file.txt
echo "[binaries]" >> cross_file.txt
echo "c = arch + 'gcc'" >> cross_file.txt
echo "cpp = arch + 'g++'" >> cross_file.txt
echo "ar = arch + 'ar'" >> cross_file.txt
echo "ld = arch + 'ld'" >> cross_file.txt
echo "srtip = arch + 'strip'" >> cross_file.txt
echo "sys_root = '${sys_root}'" >> cross_file.txt
echo "pkg_config_libdir = '${sys_root}/usr/lib/pkgconfig'" >> cross_file.txt#编译结果可运行平台的架构
echo "[host_machine]" >> cross_file.txt
echo "system = 'linux'" >> cross_file.txt
echo "cpu_family = 'arm'" >> cross_file.txt
echo "cpu = 'armv7hl'" >> cross_file.txt
echo "endian = 'little'" >> cross_file.txt#类似于configure功能 meson configure 获取到可配置项
echo "[project options]" >> cross_file.txt
echo "prefix = '/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr'" >> cross_file.txt
echo "selinux = 'disabled'" >> cross_file.txt
echo "libelf = 'disabled'" >> cross_file.txt#类似于执行configure
meson setup _build --cross-file cross_file.txt
cd _build
#编译 类似于make
ninja
cd ../
#类似于make install DESTDIR=$DEVEL
DESTDIR=$DEVEL meson install
matter交叉编译
需要设置链接库路径环境变量,新建一个set_env.sh脚本,设置环境
xing@xing-virtual-machine:~/work$ cat set_env.sh
#export PATH=$PATH::/opt/crosstools-aarch64-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/binexport PATH=$PATH:/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/bin
export PKG_CONFIG_PATH=/opt/toolchains/crosstools-arm-gcc-9.2-linux-4.19-glibc-2.30-binutils-2.32/arm-buildroot-linux-gnueabi/sysroot/usr/lib/pkgconfig
这里必须要执行,否则系统会因为找不到合适的链接目录,链接到宿主机,比如x86版本glib库,报一些变量值溢出问题
编译成功
梳理一下过程,设置环境变量,执行上面的set_env.sh,交叉编译所需库,安装好,然后执行一条脚本即可编译成功,源码SDK不需要修改
编译完,竟然有170多MB,使用strip 后,17M。这应用够大的!
相关文章:
【Matter】基于Ubuntu 22.04 交叉编译chip-tool
编译工程之际,记录一下编译过程,免得后续遗忘,总结下来chip-tool 交叉编译涉及到的知识点: 需要了解如何支持交叉编译,基于GN编译框架需要理解应用库如何交叉编译,理解pkg-config的使用meson 编译…...
Qt/C++音视频开发50-不同ffmpeg版本之间的差异处理
一、前言 ffmpeg的版本众多,从2010年开始计算的项目的话,基本上还在使用的有ffmpeg2/3/4/5/6,最近几年版本彪的比较厉害,直接4/5/6,大版本之间接口有一些变化,特别是一些废弃接口被彻底删除了,…...
低碳 Web 实践指南
现状和问题 2023年7月6日,世界迎来有记录以来最热的一天。气候变化是如今人类面临的最大健康威胁。据世界卫生组织预测2030年至2050年期间,气候变化预计每年将造成约25万人死亡。这是人们可以真切感受到的变化,而背后的主要推手是碳排放。 …...
信息安全:网络安全体系 与 网络安全模型.
信息安全:网络安全体系 与 网络安全模型. 网络安全保障是一项复杂的系统工程,是安全策略、多种技术、管理方法和人员安全素质的综合。一般而言,网络安全体系是网络安全保障系统的最高层概念抽象,是由各种网络安全单元按照一定的规…...
【云原生】Serverless 技术架构分析
一、什么是Serverless? 1、Serverless技术简介 Serverless(无服务器架构)指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存…...
Visual Studio Code 设置文件头部添加作者、日期和函数注释
step1:安装插件KoroFileHeader step2:左下角选择管理—设置—输入"fileheader"—点击"在setting.json中编辑" step3:添加下面的代码到json文件中 // 文件头部注释 "fileheader.customMade": {"Descripttion":"","ve…...
HCIA云计算 V5.0题库
云计算,这是近几年听得最多词了,云计算对于网络的发展帮助非常大,它自身所产生的价值是不可估量的!所以云计算的岗位对于很多IT公司来说,都是有一定地位的。华为认证云计算面向的对象很简单就是对云计算技术感兴趣的人…...
基于Matlab实现帧间差分法的运动目标检测(附上完整源码+图像+程序运行说明)
帧间差分法是一种常用的运动目标检测方法,可以通过对连续帧之间的差异进行分析来确定目标的运动情况。在本文中,我们将介绍如何使用Matlab实现帧间差分法的运动目标检测。 文章目录 部分源码完整源码图像程序运行说明下载 部分源码 首先,我们…...
Jenkins搭建最简教程
纠结了一小会儿,到底要不要写这个,最终还是决定简单记录一下,因为Jenkins搭建实在是太简单了,虽然也有坑,但是坑主要在找稳定的版本上。 先学一个简称,LTS (Long Term Support) 属实是长见识了,…...
设置git可以同时推送gitee和github
查看当前的远程仓库设置: git remote -v 这会列出你当前配置的远程仓库。你可能会看到类似以下的输出:origin-gitee <gitee仓库地址> (fetch)origin-gitee <gitee仓库地址> (push) 新增一个远程仓库 git remote add origin-github <githu…...
Java给Excel设置单元格格式
maven 依赖 <!--读取excel文件--> <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version> </dependency> <dependency><groupId>org.apache.poi</group…...
__block的深入研究
__block可以用于解决block内部无法修改auto变量值的问题 __block不能修饰全局变量、静态变量(static) 编译器会将__block变量包装成一个对象 调用的是,从__Block_byref_a_0的指针找到 a所在的内存,然后修改值 第一层拷贝&…...
Segment anything(图片分割大模型)
目录 1.Segment anything 2.补充图像分割和目标检测的区别 1.Segment anything 定义:图像分割通用大模型 延深:可以预计视觉检测大模型,也快了。 进一步理解:传统图像分割对于下图处理时,识别房子的是识别房子的模型…...
【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序3
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...
Java中集合容器详解:简单使用与案例分析
目录 一、概览 1.1 Collection 1. Set 2. List 3. Queue 1.2 Map 二、容器中的设计模式 迭代器模式 适配器模式 三、源码分析 ArrayList 1. 概览 2. 扩容 3. 删除元素 4. 序列化 5. Fail-Fast Vector 1. 同步 2. 扩容 3. 与 ArrayList 的比较 4. 替代方案…...
机器学习04-数据理解之数据可视化-(基于Pima数据集)
什么是数据可视化? 数据可视化是指通过图表、图形、地图等视觉元素将数据呈现出来的过程。它是将抽象的、复杂的数据转化为直观、易于理解的视觉表达的一种方法。数据可视化的目的是帮助人们更好地理解数据,从中发现模式、趋势、关联和异常,从而作出更明…...
百度@全球开发者,见证中国科技超级“碗”!
潮汐涌动时,变化悄然发生。2023年全球AI浪潮迭起,大语言模型热度空前,生成式人工智能为千行百业高质量发展带来更多想象空间,一个蓬勃创新、重构万物的“大模型时代”正蓄势待发。 滴滴滴~百度全球开发者,…...
分库分表之基于Shardingjdbc+docker+mysql主从架构实现读写分离(一)
说明:请先自行安装好docker再来看本篇文章,本篇文章主要实现通过使用docker部署mysql实现读写分离,并连接数据库测试。第二篇将实现使用Shardingjdbc实现springboot的读写分离实现。 基于Docker去创建Mysql的主从架构 #创建主从数据库文件夹…...
Ajax跨域问题
什么是跨域问题? 跨域问题来源于JavaScript的"同源策略",即只有 协议主机名端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的&…...
Vue + FormData + axios实现图片上传功能
当使用Vue FormData axios实现图片上传功能时,你可以按照以下步骤进行操作: 示例代码 首先,在Vue组件中,创建一个data属性来存储选择的文件和上传状态: data() {return {file: null,uploading: false}; }在模板中…...
终极指南:如何用开源工具Meshroom实现照片转3D模型
终极指南:如何用开源工具Meshroom实现照片转3D模型 【免费下载链接】Meshroom 3D Reconstruction Software 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 想要将普通照片变成惊艳的3D模型?过去这需要昂贵的专业软件和复杂的技术训练&am…...
如何安全解密微信聊天记录:WechatDecrypt本地解密工具全攻略
如何安全解密微信聊天记录:WechatDecrypt本地解密工具全攻略 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾因更换手机而丢失珍贵的聊天记录?是否在工作中需要提取重要的…...
nli-distilroberta-base算法优化:利用LSTM思想增强序列上下文建模
nli-distilroberta-base算法优化:利用LSTM思想增强序列上下文建模 1. 效果展示背景 在自然语言推理任务中,nli-distilroberta-base作为轻量级Transformer模型表现出色,但在处理长文本序列时仍面临挑战。传统Transformer架构的自注意力机制虽…...
别再踩坑了!手把手教你搞定vllm、nccl、cuda和python的版本匹配(附版本对照表)
深度学习环境配置避坑指南:vLLM与CUDA生态的版本兼容性实战 在部署大型语言模型推理服务时,vLLM因其高效的内存管理和推理优化成为热门选择。但许多开发者第一次接触vLLM时,往往会被复杂的依赖关系搞得焦头烂额——NCCL版本不匹配、CUDA驱动…...
数据工程合规检查自动化:构建完整解决方案的10个关键步骤
数据工程合规检查自动化:构建完整解决方案的10个关键步骤 【免费下载链接】data-engineer-handbook Data Engineer Handbook 是一个收集数据工程师学习资料的项目。 - 提供数据工程师所需的知识、工具和资源,帮助数据工程师学习和成长。 - 特点ÿ…...
突破透明动画性能瓶颈:VAP引擎实现移动端高效视觉体验
突破透明动画性能瓶颈:VAP引擎实现移动端高效视觉体验 【免费下载链接】vap VAP是企鹅电竞开发,用于播放特效动画的实现方案。具有高压缩率、硬件解码等优点。同时支持 iOS,Android,Web 平台。 项目地址: https://gitcode.com/gh_mirrors/va/vap …...
2026年必看:专业婚恋软件推荐,找到真爱不迷路
在当今快节奏的社会中,越来越多的高知青年面临着交友难、脱单难的问题。传统的社交方式往往难以满足他们对高质量伴侣的需求,而专业的婚恋软件则成为他们寻找真爱的重要途径。本文将重点推荐一款备受好评的婚恋软件——即恋App,并结合具体数据…...
咱就说中小厂房、仓库的火灾报警系统,用S7-200 PLC加组态王真的是性价比天花板——够稳定、好上手,成本还低,完全满足日常需求
基于S7-200 PLC和组态王火灾报警控制系统 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面咱先从最基础的IO分配说起,直接给大家上我常用的分配表(都是经过3个项目验证的,靠谱…...
大数据运维 | 项目一:大数据分布式集群搭建全攻略
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 前言 作为一名大数据运维工程师,你是否遇到过这样的问题: 问题场景描述1机器A可正常上网,但机器B无法连接网…...
MoMask终极指南:5分钟学会AI生成3D人体运动动画
MoMask终极指南:5分钟学会AI生成3D人体运动动画 【免费下载链接】momask-codes Official implementation of "MoMask: Generative Masked Modeling of 3D Human Motions (CVPR2024)" 项目地址: https://gitcode.com/gh_mirrors/mo/momask-codes 想…...
