从入门到精通:详解Linux环境基础开发工具的使用
前言
在这篇文章中,我将深入学习和理解Linux环境基础开发工具的使用。无论你是初学者还是有一定经验的开发者,相信这篇文章都会对你有所帮助。我们将详细讲解软件包管理器、编辑器、编译器、调试器、自动化构建工具以及版本控制工具的使用。
Linux软件包管理器YUM
什么是软件包
在Linux下安装软件,一个常用的办法是下载到程序的源代码,并进行编译,得到可执行程序。但是这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成Windows上的安装程序)放在一个服务器上,通过包管理器可以很方便地获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器,就好比 “App” 和 “应用商店” 这样的关系。YUM(Yellow dog Updater, Modified)是Linux下非常常用的一种包管理器,主要应用在Fedora、RedHat、CentOS等发行版上。
关于rzsz
rzsz是一个用于Windows机器和远端的Linux机器通过XShell传输文件的工具。安装完毕之后可以通过拖拽的方式将文件上传到远端服务器,非常方便。需要注意的是,使用yum进行操作时,必须确保主机(虚拟机)网络畅通,可以通过ping指令验证网络连接是否正常。
查看软件包
通过yum list命令可以列出当前系统中所有的软件包。由于包的数目可能非常多,我们可以使用grep命令筛选出我们关注的包。例如:
yum list | grep lrzsz
结果如下:
lrzsz.x86_64 0.12.20-36.el7 @base
软件包名称包括主版本号、次版本号、源程序发行号、软件包的发行号、主机平台和CPU架构。例如,x86_64表示64位系统的安装包,i686表示32位系统安装包。选择包时要和系统匹配。el7表示操作系统发行版的版本,如CentOS7/RedHat7,el6表示CentOS6/RedHat6。最后一列base表示软件源的名称,类似于"小米应用商店"、"华为应用商店"的概念。
安装软件
通过YUM,我们可以通过很简单的一条命令完成软件的安装。例如安装lrzsz:
sudo yum install lrzsz
YUM会自动找到需要下载的软件包,用户需要敲"y"确认安装,出现"complete"字样,说明安装完成。需要注意的是,安装软件时由于需要向系统目录中写入内容,一般需要使用sudo或切换到root账户下才能完成。另外,YUM安装软件时只能一个装完了再装另一个,如果在安装过程中再尝试用YUM安装另一个软件,YUM会报错。如果遇到YUM报错,可以自行百度解决方法。
卸载软件
卸载软件同样非常简单:
sudo yum remove lrzsz
Linux编辑器VIM使用
VIM的基本概念
VIM是VI的升级版本,它不仅兼容VI的所有指令,而且还有一些新的特性,例如语法加亮、可视化操作等。VIM具有多种模式,目前我们主要掌握三种:命令模式(Command Mode)、插入模式(Insert Mode)和末行模式(Last Line Mode)。
- 命令模式(Command Mode):控制屏幕光标的移动、字符、字或行的删除、复制某区段等操作,以及进入插入模式或末行模式。
- 插入模式(Insert Mode):在此模式下可以进行文字输入,按
ESC键可回到命令模式。 - 末行模式(Last Line Mode):进行文件保存或退出操作,也可以进行文件替换、找字符串、列出行号等操作。在命令模式下按
:即可进入末行模式。
VIM的基本操作
进入VIM
在系统提示符下输入vim及文件名称后进入VIM全屏幕编辑界面。例如:
vim test.c
进入VIM后,默认处于命令模式,需要切换到插入模式才能输入文字。
模式切换
- 命令模式切换至插入模式:按
a、i或o。a:从光标当前位置的下一个位置开始输入文字。i:从光标当前位置开始输入文字。o:插入新的一行,从行首开始输入文字。
- 插入模式切换至命令模式:按
ESC键。 - 命令模式切换至末行模式:按
shift + :。
退出VIM及保存文件
在命令模式下,按一下:进入末行模式。例如:
:w # 保存当前文件
:wq # 保存并退出VIM
:q! # 不保存强制退出VIM
VIM正常模式命令集
插入模式
i:切换进入插入模式,从光标当前位置开始输入文件。a:切换进入插入模式,从光标当前位置的下一个位置开始输入文字。o:切换进入插入模式,插入新的一行,从行首开始输入文字。
移动光标
- 使用
h、j、k、l分别控制光标左、下、上、右移一格。 G:移动到文章的最后。$:移动到光标所在行的行尾。^:移动到光标所在行的行首。w:光标跳到下一个字的开头。e:光标跳到下一个字的字尾。b:光标回到上一个字的开头。#l:光标移到该行的第#个位置,例如5l、56l。gg:进入文本开头。shift + g:进入文本末尾。ctrl + b:屏幕往后移动一页。ctrl + f:屏幕往前移动一页。ctrl + u:屏幕往后移动半页。ctrl + d:屏幕往前移动半页。
删除文字
x:每按一次,删除光标所在位置的一个字符。#x:例如,6x表示删除光标所在位置的后面(包含自己在内)6个字符。X:每按一次,删除光标所在位置的前一个字符。#X:例如,20X表示删除光标所在位置的前20个字符。dd:删除光标所在行。#dd:从光标所在行开始删除#行。
复制和粘贴
yw:将光标所在处到字尾的字符复制到缓冲区中。#yw:复制#个字到缓冲区。yy:复制光标所在行到缓冲区。#yy:例如,6yy表示拷贝从光标所在的该行往下数6行文字。p:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
替换
r:替换光标所在处的字符。R:替换光标所到之处的字符,直到按下ESC键为止。
撤销操作
u:撤销上一次操作。按多次u可以执行多次撤销。ctrl + r:恢复撤销的操作。
更改
cw:更改光标所在处的字到字尾处。c#w:例如,c3w表示更改3个字。
跳至指定行
ctrl + g:列出光标所在行的行号。#G:例如,15G表示移动光标至文章的第15行行首。
VIM末行模式命令集
列出行号
set nu:在文件中的每一行前面列出行号。
跳到文件中的某一行
#:输入数字#,再按回车键就会跳
到该行。例如,输入数字15,再回车,就会跳到文章的第15行。
查找字符
/关键字:按/键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n会往后寻找。?关键字:按?键,再输入想寻找的字符,如果第一次找的关键字不是想要的,可以一直按n会往前寻找。
保存文件
w:保存文件。
离开VIM
q:退出,如果无法离开VIM,可以在q后跟一个!强制退出。wq:保存并退出。
VIM操作总结
VIM有三种主要模式:正常模式、插入模式和末行模式。我们可以使用各种命令进行文件的编辑、查看、查询、插入、删除、替换、撤销、复制等操作。此外,VIM还有许多其他模式,用户可以通过研究VIM的帮助文档来了解更多。
简单VIM配置
配置文件的位置
在目录/etc/下面,有个名为vimrc的文件,这是系统中公共的VIM配置文件,对所有用户都有效。而在每个用户的主目录下,可以自己建立私有的配置文件,命名为.vimrc。例如,/root目录下,通常已经存在一个.vimrc文件,如果不存在,则可以创建一个。
切换用户到自己的工作目录:
su
cd ~
打开自己目录下的.vimrc文件:
vim .vimrc
常用配置选项
- 设置语法高亮:
syntax on - 显示行号:
set nu - 设置缩进的空格数为4:
set shiftwidth=4
使用插件
要配置更强大的VIM,原生的配置可能功能不全,可以选择安装插件来完善配置。例如,安装TagList插件和WinManager插件。
安装TagList插件
- 下载
taglist_xx.zip,解压完成后,将解压出来的doc内容放到~/.vim/doc,将解压出来的plugin内容拷贝到~/.vim/plugin。 - 在
~/.vimrc中添加:let Tlist_Show_One_File=1 let Tlist_Exit_OnlyWindow=1 let Tlist_Use_Right_Window=1
安装文件浏览器和窗口管理器插件WinManager
- 下载
winmanager.zip,解压完成后,将解压出来的doc内容放到~/.vim/doc,将解压出来的plugin内容拷贝到~/.vim/plugin。 - 在
~/.vimrc中添加:let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr> - 重启VIM,打开文件,在正常模式下输入
wm。
Linux编译器GCC/G++使用
背景知识
GCC是GNU Compiler Collection的缩写,是Linux系统中的标准编译器。它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等。GCC编译器的工作过程分为四个阶段:预处理、编译、汇编和连接。
- 预处理:进行宏替换、文件包含、条件编译和去注释等操作。
- 编译:将预处理后的代码翻译成汇编语言。
- 汇编:将汇编代码转化为机器码。
- 连接:将目标文件与库文件链接,生成可执行文件或库文件。
GCC如何完成
预处理
预处理主要包括宏定义、文件包含、条件编译、去注释等操作。预处理指令是以#号开头的代码行。用户可以使用-E选项进行预处理,停止编译过程。例如:
gcc -E hello.c -o hello.i
其中,-E选项的作用是让GCC在预处理结束后停止编译过程,-o选项指定输出文件,.i文件是已经过预处理的C源代码。
编译
编译阶段中,GCC首先检查代码的规范性、是否有语法错误等,在检查无误后,将代码翻译成汇编语言。用户可以使用-S选项只进行编译而不进行汇编,生成汇编代码。例如:
gcc -S hello.i -o hello.s
汇编
汇编阶段是将汇编代码转化为机器码。用户可以使用-c选项生成目标文件。例如:
gcc -c hello.s -o hello.o
连接
连接阶段是将目标文件与库文件链接,生成可执行文件或库文件。例如:
gcc hello.o -o hello
函数库
在C程序中,常用的库函数如printf的实现并不在源代码中定义,而是在库文件中。系统将这些函数实现放在名为libc.so.6的库文件中,GCC会在链接阶段将其链接到程序中。函数库分为静态库和动态库两种。
- 静态库:在编译链接时将库文件的代码全部加入到可执行文件中,生成的文件较大,但运行时不需要库文件。静态库的后缀名一般为
.a。 - 动态库:在编译链接时不将库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接器加载库文件,节省系统开销。动态库的后缀名一般为
.so。
GCC选项
GCC提供了许多选项,用户可以根据需要进行配置。例如:
-E:只激活预处理,不生成文件。-S:只进行编译,不进行汇编和链接。-c:只进行编译,不进行连接。-o:指定输出文件。-static:生成静态链接的文件。-g:生成调试信息。-shared:尽量使用动态库,生成的文件较小,但需要系统有动态库。-O0至-O3:编译器优化选项的4个级别,-O0表示没有优化,-O1为默认值,-O3优化级别最高。-w:不生成任何警告信息。-Wall:生成所有警告信息。
Linux调试器GDB使用
背景
程序发布方式有两种:debug模式和release模式。Linux下GCC/G++生成的二进制程序默认是release模式,要使用GDB调试,必须在源代码生成二进制程序时加上-g选项。
开始使用
GDB是GNU Debugger的缩写,用于调试程序。用户可以通过以下命令启动GDB:
gdb binFile
调试过程中可以使用以下命令:
list或l 行号:显示源代码,每次列10行。run或r:运行程序。next或n:单条执行。step或s:进入函数调用。break或b 行号:在某一行设置断点。info break:查看断点信息。finish:执行到当前函数返回。print或p 表达式:打印表达式的值。set var:修改变量的值。continue或c:从当前位置开始连续执行程序。delete breakpoints:删除所有断点。disable breakpoints:禁用断点。enable breakpoints:启用断点。display 变量名:跟踪查看变量值。undisplay:取消对变量的跟踪。until 行号:跳至指定行。backtrace或bt:查看函数调用及参数。info locals:查看当前栈帧局部变量的值。quit:退出GDB。
理解
通过实际操作理解GDB的使用方法,可以帮助用户在调试过程中快速定位和解决问题。
Linux项目自动化构建工具Make/Makefile
背景
Makefile是一种自动化编译工具,定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译等。Makefile极大地提高了软件开发的效率,特别是在大型项目中。Make是一个命令工具,用于解释Makefile中的指令。
理解
Makefile定义了一系列依赖关系和命令。例如:
hello: hello.ogcc hello.o -o hellohello.o: hello.sgcc -c hello.s -o hello.ohello.s: hello.igcc -S hello.i -o hello.shello.i: hello.cgcc -E hello.c -o hello.i
Makefile通过依赖关系定义了编译顺序,Make会根据依赖关系自动进行编译。
项目清理
在Makefile中定义清理目标,可以方便地清除所有生成的文件。例如:
.PHONY: clean
clean:rm -f hello.i hello.s hello.o hello
伪目标clean用于清除所有目标文件,以便重编译。
Linux第一个小程序:进度条
\r和\n
回车\r和换行\n的概念在进度条显示中非常重要。回车\r将光标移到行首,换行\n将光标移到下一行。
行缓冲区概念
行缓冲区会导致输出无法立即显示,可以通过fflush(stdout)刷新缓冲区。例如:
#include <stdio.h>
#include <unistd.h>int main() {printf("hello Makefile!");fflush(stdout);sleep(3);return 0;
}
进度条代码
下面是一个简单的进度条实现代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main() {int i = 0;char bar[102];memset(bar, 0, sizeof(bar));const char *lable = "|/-\\";while (i <= 100) {printf("[%-100s][%d%%][%c]\r", bar, i, lable[i % 4]);fflush(stdout);bar[i++] = '#';usleep(10000);}printf("\n");return 0;
}
使用Git命令行
安装Git
可以通过以下命令安装Git:
yum install git
在GitHub创建项目
注册账号
在GitHub官网注册账号,并进行邮箱校验。
创建项目
- 登录成功后,进入个人主页,点击左下方的
New repository按钮新建项目。 - 在新页面中输入项目名称,点击
Create repository按钮确认创建。 - 在创建好的项目页面中复制项目的链接,备用下载。
下载项目到本地
创建好一个放置代码的目录,然后使用以下命令下载项目:
git clone [url]
Git操作三板斧
git add
将需要用Git管理的文件告知Git:
git add [文件名]
git commit
提交改动到本地:
git commit -m "提交日志"
git push
同步到远端服务器上:
git push
需要输入用户名和密码,提交成功后,刷新GitHub页面就能看到代码改动了。
配置免密码提交
可以参考CSDN博客进行配置。
总结
从软件包管理器、编辑器、编译器、调试器、自动化构建工具到版本控制工具,每个工具都有其独特的功能和用法。掌握这些工具,可以帮助我们更高效地进行开发和管理项目。
嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。
觉得有点收获的话,不妨给我点个赞吧!
如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~
相关文章:
从入门到精通:详解Linux环境基础开发工具的使用
前言 在这篇文章中,我将深入学习和理解Linux环境基础开发工具的使用。无论你是初学者还是有一定经验的开发者,相信这篇文章都会对你有所帮助。我们将详细讲解软件包管理器、编辑器、编译器、调试器、自动化构建工具以及版本控制工具的使用。 Linux软件…...
linux(centos 7)安装 node
linux(centos 7)安装 node 下载对应版本&安装解压配置环境变量使配置文件生效验证是否安装成功附加 目前node最新版本是 node-v22.0.0 官网下载地址:https://registry.npmmirror.com/binary.html?pathnode/latest-v22.x/node-v22.0.0-li…...
C++之第九课
课程列表 今天,我们要学习一种结构:循环结构。 循环的方法有3种。 今天先将第1种for学了: int a;//循环变量 int b; for(a1;a<10;a){//像if那样“打包”cout<<a<<" ";b; } 当然,也可以这样写&#…...
618精选编程书单推荐:优质知识提升你的代码力
前言 在这个快速发展的技术时代,不断学习和提升自己的编程技能是每位程序员的必修课。今天,我为大家精心挑选了一系列编程技术书籍,它们将是你技术成长道路上的宝贵财富。 文章目录 前言编程之路:为何阅读书籍是不可或缺的书籍的…...
使用httpx异步获取高校招生信息:一步到位的代理配置教程
概述 随着2024年中国高考的临近,考生和家长对高校招生信息的需求日益增加。了解各高校的专业、课程设置和录取标准对于高考志愿填报至关重要。通过爬虫技术,可以高效地从各高校官网获取这些关键信息。然而,面对大量的请求和反爬机制的挑战&a…...
使用Java Stream API的map方法将包含Long类型ID的流转换为String数组
在这个例子中,idList是一个包含Long类型ID的列表。我们使用stream()方法创建一个流,然后应用map(String::valueOf)方法将Long类型的ID转换为String类型。最后,我们使用toArray(String[]::new)方法将流中的元素收集到一个新的String[]数组中。…...
centos 安装nginx 并配置https ssl
进入你要安装的目录 一般是/usr/local/ wget https://nginx.org/download/nginx-1.24.0.tar.gz解压安装包:使用以下命令解压下载的Nginx安装包: tar -zxvf nginx-1.24.0.tar.gz在编译和安装Nginx之前,确保您的系统上已安装了必要的编译工具和…...
Jenkins 自动化部署
Post Steps部分 Exec cmmand cd /data/build/test-admin/ rm -f app.jar rm -f Dockerfile cp target/app.jar ./ cp docker/Dockerfile ./docker build -t test-admin . docker tag test-admin 192.168.1.100/test/test-admin:1.2-SNAPSHOT docker push 192.168.1.100/test/…...
VUE3好看的酒网站模板源码
文章目录 1.设计来源1.1 首页界面1.2 十大名酒界面1.3 名酒新闻界面1.4 联系我们界面1.5 在线留言界面 2.效果和结构2.1 动态效果2.2 代码结构 3.VUE框架系列源码4.源码下载 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/detai…...
索引压缩技术详解
在现代搜索引擎和信息检索系统中,索引压缩技术是提高存储效率和检索速度的关键手段。本文将深入探讨几种常见的索引压缩技术,包括词典压缩、倒排列表压缩算法、文档编号重排序以及静态索引裁剪。 词典压缩 1.1 基础概念 词典(Dictionary&am…...
完全匹配企业需求的替代FTP升级软件怎么找
企业在处理数据传输时,效率和安全性是关键。尽管传统的FTP曾被广泛采用,但因其传输慢、安全性不足和难以管理等问题,已不再满足现代企业的需求。许多企业正在寻找能够满足其需求的FTP替代方案,但市场上选择众多,找到合…...
动态规划:分割等和子集
参考资料:代码随想录 题目链接:. - 力扣(LeetCode) 这道题是01背包问题的抽象,这道题的难点在于怎么绕明白遍历顺序是从后往前。 题目中给的nums数组,以nums[1,5,11,5]为例,可以分析为有4个物…...
踩坑——纪实
开发踩坑纪实 1 npm安装1.1 查看当前的npm镜像设置1.2 清空缓存1.3 修改镜像1.4 查看修改结果1.5 重新安装vue 2 VScode——NPM脚本窗口找不到3 springboot项目中updateById()失效4 前端跨域4.1 后端加个配置类4.2 CrossOrigin注解 5 路由出口6 springdoc openapi3 swagger3文件…...
java实现websocket的五种方式(mark下)
java实现websocket的五种方式 java 实现 websocket的五种方式_java_萧曵 丶-GitCode 开源社区...
网络安全技术心得体会
网络与信息安全技术心得体会 通过对网络安全这门课程的学习,我进一步了解了网络安全技术的相关知识。大致来说,所谓网络安全指的是对网络系统中各类软硬件和数据信息等提供保护屏障,确保数据信息不受到恶意侵入、窃取等破坏,保证…...
光耦合器的特性和应用概述
光耦合器又称光电耦合器,是现代电子学中必不可少的元件,确保隔离电路之间安全有效的信号传输。本文探讨了光耦合器的特性及其多样化应用,强调了它们在各种电子系统中的关键作用。 什么是光耦合器? 光耦合器是一种设计用于利用光传…...
工作干到抑郁了,要不要辞职?
在知乎上看到以为网友提问:工作干到抑郁,该不该辞职? 今天和大家聊聊这个话题,如果你也有类似的情况,希望这篇文章能帮到你。 熟悉瑶琴的朋友,都知道瑶琴在去年有一次裸辞的经历。离职前,严重的…...
Vs Code插件位置:
Vs Code插件位置: C:\Users\dell.vscode\extensions...
521源码-免费源码-子比主题最新版7.6绕授权破解完整教程
首先,zibll主题授权是向api.zibll.com发送请求,api.zibll.com就验证这个请求,如果参数(比如header)正确那么授权成功,然而众所周知,服务器可以修改本地host文件,来实现某些特定功能,把host文件加…...
前端基础入门三大核心之HTML篇:Webpack、Vite、Grunt、Gulp的场景与实战运用
前端基础入门三大核心之HTML篇:Webpack、Vite、Grunt、Gulp的场景与实战运用 一、Webpack:模块打包与优化的集大成者基本概念与作用应用场景实战例 二、Vite:快速开发的现代化构建利器基本概念应用场景实战例 三、Gulp:任务自动化…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
