基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础
摘要
本文分为两部分:Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置,可以实现用VSCode操作虚拟机。为了后续工作,搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础,包括Linux指令、Git、Makefile、裸机和RTOS。
环境搭建
ESP32学习方法:主要看API手册和历程
API和寄存器的关系:因为寄存器的操作太复杂了,所以原厂工程师把寄存器的操作封装成API
1. UI交互图和程序流程图
在设计软件之前,要先画UI交互图和程序流程图
2. Ubuntu虚拟机安装及SSH、Samba配置
2.1 安装虚拟机
安装VMware Workstation,我安装的版本是17.6。VMware17.6 软件安装包下载及安装教程
2.2 安装Ubuntu
官网:https://ubuntu.com/download/desktop
实测不用“科学方法”下载速度较慢。我下载的是Ubuntu 24.04.1 LTS
参考Ubuntu 20.04 LTS安装教程:超详细VMware安装Ubuntu虚拟机步骤
顺序略有不同,但大体一致。
2.3 在虚拟机中安装SSH
打开Ubuntu的终端,输入
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
ps -e|grep ssh
2.4 Samba服务器搭建
Samba 允许不同操作系统(如 Windows、Linux 或 macOS)的设备访问和管理该文件夹中的内容。通过 Samba 共享的文件夹可以在网络上的其他设备之间共享文件。
在Ubuntu的终端中,输入
sudo apt-get update
sudo apt-get install samba
sudo apt-get install gedit
sudo gedit /etc/samba/smb.conf
会弹出一个文档,在文档底部加入下面配置。其中share
是共享文件夹的名称,可以改为别的。
[share]valid user = xzhpath = /home/xzh/sharepublic = yeswritable = yescreate mask = 0644force create mode = 0644directory mask = 0755force directory mode = 0755available = yes
改完之后保存
在Ubuntu终端中继续输入下面命令重启Samba服务:
sudo service smbd restart
sudo ufw allow samba
输入sudo smbpasswd -a xzh
创建Samba用户名,我取名为xzh
,然后根据提示设置密码。
重启下一Samba:
sudo /etc/init.d/smbd restart
在Ubuntu终端中输入ip addr show
查询Samba的IP地址
Interface ens33
表示我的网络接口,通常表示有线网络连接。
inet 192.168.62.128/24 是我当前机器的 IPv4 地址,即 192.168.62.128。这就是其他设备用来连接到我 Samba 服务器的 IP 地址。
inet6 fe80::20c:29ff:fe2c/64 是我机器的 IPv6 地址,但通常局域网内共享文件更多使用 IPv4 地址。
在Windows系统上按下“Windows
键+R
”,输入\\192.168.62.128
,点击确定。
Windows安全中心会出现弹窗“输入网络凭据”,输入刚刚创建的Samba用户名和密码,然后点击确定就可以进入共享文件夹了。
2.5 在Window的VSCode中通过SSH命令行方式访问Ubuntu
在Windows中打开VSCode,安装C/C++和SSH插件
配置连接Ubuntu
添加配置信息:
Host ubuntuHostName 192.168.62.128User xzh
192.168.62.128
为Ubuntu的IP,xzh为我Ubuntu的用户名。
保存之后刷新一下,出现ubuntu。
选择linux
选择continue
输入密码,按回车
成功连接
3. 乐鑫ESP32 SDK环境搭建
3.1 安装环境依赖工具
在VSCode的终端中输入
sudo apt-get update
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
3.2 下载源码
在终端中输入:
mkdir esp
cd ~/esp
git clone -b release/v4.4 --recursive https://github.com/espressif/esp-idf.git
在git clone时遇到了这个问题:
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 780 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
fatal: clone of 'https://github.com/espressif/esp32-wifi-lib.git' into submodule path '/home/xzh/esp/esp-idf/components/esp_wifi/lib' failed
Failed to clone 'components/esp_wifi/lib' a second time, aborting
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
这是由于在使用 HTTP/2 协议通过 curl 下载时,网络连接中断或被取消。可能是因为网络不稳定或远程服务器的问题。
error: 780 bytes of body are still expected
Git 期望从服务器接收到更多数据,但数据传输中途中断了。
fetch-pack: unexpected disconnect while reading sideband packet
在 Git 从服务器读取数据时连接被意外断开。
fatal: early EOF
和 fatal: fetch-pack: invalid index-pack output
Git 收到了一个不完整的包,导致它在处理包时失败。EOF 表示文件或数据流提前结束。
fatal: clone of 'https://github.com/espressif/esp32-wifi-lib.git' into submodule path '/home/xzh/esp/esp-idf/components/esp_wifi/lib' failed
Git 无法完成克隆操作,因此将子模块克隆到指定路径失败。
Failed to clone 'components/esp_wifi/lib' a second time, aborting
Git 尝试重新克隆,但再次失败,因此操作中止。
解决办法:
进入esp_idf文件夹内
cd /home/xzh/esp/esp-idf/components/esp_wifi/lib
单独更新子模块
git submodule update --init --recursive
3.3 安装编译链
进入到解压的esp-idf文件中,安装编译代码需要的工具链
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh
出现报错:
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)
Installing virtualenv
error: externally-managed-environment× This environment is externally managed
╰─> To install Python packages system-wide, try apt installpython3-xyz, where xyz is the package you are trying toinstall.If you wish to install a non-Debian-packaged Python package,create a virtual environment using python3 -m venv path/to/venv.Then use path/to/venv/bin/python and path/to/venv/bin/pip. Makesure you have python3-full installed.If you wish to install a non-Debian packaged Python application,it may be easiest to use pipx install xyz, which will manage avirtual environment for you. Make sure you have pipx installed.See /usr/share/doc/python3.12/README.venv for more information.note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.
Traceback (most recent call last):File "/home/xzh/esp/esp-idf/tools/idf_tools.py", line 1587, in action_install_python_envimport virtualenv # noqa: F401^^^^^^^^^^^^^^^^^
ModuleNotFoundError: No module named 'virtualenv'During handling of the above exception, another exception occurred:Traceback (most recent call last):File "/home/xzh/esp/esp-idf/tools/idf_tools.py", line 1996, in <module>main(sys.argv[1:])File "/home/xzh/esp/esp-idf/tools/idf_tools.py", line 1992, in mainaction_func(args)File "/home/xzh/esp/esp-idf/tools/idf_tools.py", line 1590, in action_install_python_envsubprocess.check_call([sys.executable, '-m', 'pip', 'install', '--user', 'virtualenv'],File "/usr/lib/python3.12/subprocess.py", line 413, in check_callraise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '-m', 'pip', 'install', '--user', 'virtualenv']' returned non-zero exit status 1.
分析:
error: externally-managed-environment
这条错误提示表明你的 Python 环境受到了外部管理(即,操作系统的包管理系统控制了这个环境),而不允许通过 pip
在全局安装 Python 包。这是为了保护系统环境不被破坏,因为不同的包管理系统之间可能会发生冲突。
This environment is externally managed
你的操作系统(例如,Ubuntu 或 Debian)将 Python 环境标记为外部管理,阻止 pip 在全局环境中安装包,以避免系统依赖关系被破坏。
ModuleNotFoundError: No module named 'virtualenv'
你尝试运行的 Python 脚本 idf_tools.py
需要使用 virtualenv
模块,但这个模块在系统中并未安装。
解决办法:
使用 apt
安装系统范围的包
sudo apt install python3-virtualenv
3.4 设置环境
把esp-idf路径设为本地路径,在终端执行:
. /home/xzh/esp/esp-idf/export.sh
3.5 判断是否搭建成功
通过idf.py --version
查看 ESP-IDF 版本
得到输出:
通过 git log
查看当前代码状态
得到输出:
提交历史和 Git 标签都表明我的代码库已经成功同步到最新版本,克隆没有问题,ESP-IDF 环境应该已经搭建完成。
软件基础
4. Linux 指令
4.1 cd (Change Directory)
cd
命令用于在目录之间切换或更改当前的工作目录。
cd <目录路径>
: 切换到指定的目录。cd ..
: 切换到上一级目录。
示例:如果当前在 /home/user/Documents,执行cd ..
将切换到 /home/user。cd ~
: 切换到当前用户的主目录。
示例:cd ~
将切换到类似 /home/username 的路径。cd -
: 切换到上一个工作目录。
示例:如果你从 /home/user 切换到 /var/log,执行cd -
将回到 /home/user。
4.2 ls (List Directory Contents)
ls
命令用于显示当前目录或指定目录中的文件和子目录的列表。
ls
: 显示当前目录中的文件和子目录。ls <目录路径>
: 显示指定目录中的文件和子目录。
4.3 mkdir (Make Directory)
mkdir
命令用于创建新的目录。
mkdir <目录名>
: 创建一个新的目录。
示例:mkdir my_folder
会在当前目录下创建一个名为 my_folder 的目录。mkdir -p <路径>
: 创建目录及其父目录(如果不存在)。
示例:mkdir -p /home/user/docs/project
如果 docs 或 project 目录不存在,它们都会被创建。
4.4 rm (Remove)
rm
命令用于删除文件或目录。
- rm <文件名>: 删除指定文件。
- rm -r <目录名>: 递归删除目录及其内部所有内容。
4.5 cp (Copy)
cp 命令用于复制文件或目录。
cp <源文件> <目标路径>
: 复制文件到目标路径。
示例:cp file.txt /home/user/Documents/
将 file.txt 复制到 /home/user/Documents/ 目录。cp <源文件> <目标文件>
: 复制文件并重命名。
示例:cp file.txt newfile.txt 将 file.txt
复制为 newfile.txt。cp -r <源目录> <目标路径>
: 递归复制目录及其内容。
示例:cp -r my_folder /home/user/backup/
将整个 my_folder 目录及其所有内容复制到 /home/user/backup/ 目录。
4.6 mv (Move)
mv
命令用于移动或重命名文件或目录。它将文件从一个位置移动到另一个位置,或者将文件/目录重命名。
mv <源文件> <目标路径>
: 移动文件到目标路径。
示例:mv file.txt /home/user/Documents/
将 file.txt 移动到 /home/user/Documents/ 目录。mv <源文件> <新文件名>
: 重命名文件。
示例:mv oldname.txt newname.txt
将 oldname.txt 重命名为 newname.txt。mv <源目录> <目标路径>
: 移动整个目录到目标路径。
示例:mv my_folder /home/user/backup/
将 my_folder 目录移动到 /home/user/backup/。
5. Git 使用
Git是一个版本管理工具。
5.1 编辑文件
cd share
mkdir esp_demo1
cd esp_demo1
vim test.c
新建了一个test.c文件,随便输入点啥,按Esc
+:
+w
+q
保存该文件。输入ls
命令,可以看到输出test.c。
用git init创建本地仓库
然后设置用户名和邮箱
用git status
查看当前状态。输出显示test.c是新添加的文件
用git add *
把当前路径下所有文件都添加进本地仓库。
用git commit -m "标签名"
去打标签
用git log
看一下日志
如果需要修改test.c文件,用vim test.c
进入文件,保存完之后,再用git add *
指令添加一下。然后打个标签git commit -m "fix xxx function"
用git log
可以看到修改记录
用git show <哈希值>
可以看到,某一次修改的内容
再用vim test.c
加点东西,然后用git diff
查看区别
5.2 添加分支
分支(branch)允许你在不同的开发线上工作,避免干扰主项目的稳定版本,并为不同的功能、修复或实验提供独立的空间。
用git checkout -b dev
添加分支,用git branch -a
查看本地仓库有哪些分支。
用vim test.c
修改文件。用git add *
添加,用git commit -m
打标签。用git log
用git checkout main
回到主分支,用git log
查看日志,发现主分支的日志没被污染。
5.3 结束打标签
在软件发布时一般用git tag -a v1.0 -m "v1.0 version"
打标签。输入git tag -l
查看,输出显示:
6. Makefile
Makefile 是由 GNU Make 工具使用的文件,定义了项目的编译规则。它描述了如何从源代码生成可执行文件或其他目标文件,主要通过一系列的规则、依赖关系和命令来完成。
CMake 是一个跨平台的构建系统工具,比 Makefile 更高级,适合管理更复杂的项目。CMake 的主要作用是生成平台特定的构建文件(如 Makefile 或 Visual Studio 工程文件),简化跨平台构建流程。CMake 使用 CMakeLists.txt 文件来定义项目的构建规则。CMake 通过解析这个文件,根据目标平台生成相应的构建文件。
- Makefile:较为基础,适用于单一平台和相对简单的项目,依赖于开发者自己定义的规则和依赖关系。
- CMake:跨平台,适用于大型和复杂项目,自动处理依赖并生成平台特定的构建文件。
7. “裸机”和实时操作系统(RTOS)
在嵌入式系统开发中,"裸机"和"实时操作系统(RTOS)"是两种常见的编程模式。它们在资源管理、任务调度和系统复杂性等方面有显著的区别。
7.1 裸机编程
裸机编程(Bare Metal Programming)指的是直接在硬件上运行代码,不依赖任何操作系统。所有的系统资源、外设和任务调度由程序员手动管理。这种编程方式通常用于资源受限、系统简单且对实时性要求不高的嵌入式设备。
7.2 实时操作系统(RTOS)
实时操作系统(RTOS)是一类专门为实时应用设计的操作系统,能够提供确定性的任务调度,保证任务在严格的时间限制内完成。RTOS通过内核来管理任务调度、中断处理、资源共享等功能。
推荐链接
- ESP-IDF 编程指南 release-v4.4
- ESP-IDF 编程指南 版本 v5.3.1
- DesktopScreen 1 环境搭建
相关文章:

基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础
摘要 本文分为两部分:Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置,可以实现用VSCode操作虚拟机。为了后续工作,搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础,包…...

接口(完)
大家好,今天我们着重来总结一下接口的知识,并且将接口和抽象类的区别罗列一下,帮助我们更好的认识抽象类和接口。 2.7 抽象类和接口的区别. 抽类和接口都是Java中多态的常见使用方式,都需要重点掌握,同时又要认清两者的区别(重要!!…...

数据结构——实验七·排序
欢迎各位大佬们来到Tubishu的博客🌟 Tubishu是一名计算机本科生,不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐🔥 求各位大佬们垂怜🔥点赞评论一下呗🔥🔥 本文专栏 ➡️ 数据结构 …...

JVM堆空间
JVM(Java虚拟机)堆空间是Java内存管理的核心区域之一,用于存储Java对象实例。以下是关于JVM堆空间的详细介绍: 1. 堆空间的作用 • 存储对象实例:几乎所有的Java对象实例(通过new关键字创建的对象…...

【详细】SSH公私钥认证与渗透测试攻击场景
SSH(Secure Shell)是一个用于远程登录和执行命令的网络协议,其认证方式通常有两种:基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制,并探讨在渗透测试场景中,如何利用对靶机具有读取和…...

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)
1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架,它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架! 官方网址:https://ffmpeg.org/ FFmpeg 的主要特点和功能: 编解码器支持: FFmpe…...

C++异步future
🌎 C11异步futrue 文章目录: C11异步futrue future介绍 应用场景 future操作 std::async函数模版 std::packaged_task类模版 std::promise类模版 🚀future介绍 std::future是C11标准库…...

Oracle 12c 中的 CDB和PDB的启动和关闭
一、简介 Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...

Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向
在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能,使用 html2canvas 将 HTML 内容转换为图片,再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例: 步骤 1:安装依赖 首先,在项…...

chrome插件:网页图片高清下载
前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.输入需要访问的网址,点击扩展插件即可进行图片…...

汽车定速巡航
配备定速巡航功能的车型,一般在方向盘附近设有4~6个按键(可能共用键位)。 要设置定速巡航,不仅需要方向盘上的按键,还要油门配合。 设置的一般流程: 开关:类似步枪上的“保险”,按…...

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel
WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…...

14-6-2C++STL的list
(一)list对象的带参数构造 1.list(elem);//构造函数将n个elem拷贝给本身 #include <iostream> #include <list> using namespace std; int main() { list<int> lst(3,7); list<int>::iterator it; for(itlst.begi…...

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型
摘要:我们推出了Sigma,这是一个专为系统领域设计的高效大型语言模型,其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构,并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询(Q&…...

私域流量池构建与转化策略:以开源链动2+1模式AI智能名片S2B2C商城小程序为例
摘要:随着互联网技术的快速发展,流量已成为企业竞争的关键资源。私域流量池,作为提升用户转化率和增强用户粘性的有效手段,正逐渐受到企业的广泛关注。本文旨在深入探讨私域流量池构建的目的、优势及其在实际应用中的策略…...

vofa++使用方法
控件区可以添加控件用来啊多样显示 点击一个控件然后右键可以选择要添加显示的数据,点all表全部显示, 点auto可以自动布局 要用控件需要选择协议,不知道协议具体格式可以点击问号看看,并且最好用printf重定义来实现 比如我要实现F…...

LogicFlow 一款流程图编辑框架
LogicFlow是什么 LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景,如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码…...

HTML<kbd>标签
例子 在文档中将一些文本定义为键盘输入: <p>Press <kbd>Ctrl</kbd> <kbd>C</kbd> to copy text (Windows).</p> <p>Press <kbd>Cmd</kbd> <kbd>C</kbd> to copy text (Mac OS).</p>…...

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)
一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…...

150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究
一 . 只能被一个client 链接 socket例子 此例子用于socket 例子, 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子, 该例子只能用于一个客户端连接server。…...

深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...

ESP8266 NodeMCU与WS2812灯带:实现多种花样变换
在现代电子创意项目中,LED灯带的应用已经变得极为广泛。通过结合ESP8266 NodeMCU的强大处理能力和FastLED库的高效功能,我们可以轻松实现多达100种灯带变换效果。本文将详细介绍如何使用Arduino IDE编程,实现从基础到高级的灯光效果ÿ…...

MacOS安装Docker battery-historian
文章目录 需求安装battery-historian实测配置国内源相关文章 需求 分析Android电池耗电情况、唤醒、doze状态等都要用battery-historian, 在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。装完不需要做任…...

Linux的基本指令(上)
1.ls指令 语法:ls [选项] [目录或文件] 功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。 常用选项: -a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。 -d 将…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.1 从零搭建NumPy环境:安装指南与初体验
1. 从零搭建NumPy环境:安装指南与初体验 NumPy核心能力图解(架构图) NumPy 是 Python 中用于科学计算的核心库,它提供了高效的多维数组对象以及用于处理这些数组的各种操作。NumPy 的核心能力可以概括为以下几个方面:…...

ASP .NET Core 学习(.NET9)部署(一)windows
在windows部署 ASP .NET Core 的时候IIS是不二选择 一、IIS安装 不论是在window7 、w10还是Windows Server,都是十分简单的,下面以Windows10为例 打开控制面版—程序—启用或关闭Windows功能 勾选图中的两项,其中的子项看需求自行勾选&am…...

百日计划(2025年1月22日-4月30日,以完成ue4.0 shader抄写为目标)
目前遇到三个现象: 1,以前都是以跳槽为目标学习技术,但是目前工作难找,所以失去方向,有点迷茫了。 2,对于一项完整的内容,月计划时间不够用,如果工作上一扰乱,就又虎头蛇…...

AIGC视频生成模型:慕尼黑大学、NVIDIA等的Video LDMs模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍慕尼黑大学携手 NVIDIA 等共同推出视频生成模型 Video LDMs。NVIDIA 在 AI 领域的卓越成就家喻户晓,而慕尼黑大学同样不容小觑,…...

类与对象(中)
类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下 6 个默认成员函数。默认成员函数:用户没有显式实现,编译器会生…...