MSYS2+GCC 安装与应用保姆手册

9d68baeb0ce24159b6038527d5dbd5f6.png

 

msys2 提供可在Windows下使用 GCC 编译器;并且,借助 Linux 包管理功能,可轻松下载丰富的可在Windows下直接使用的 C/C++ 开发包,包括编译好的二进制包。

 

网络库asio、准标准库boost、zip解压缩、json格式处理、引擎 SDL……十八般兵器,一行指令下载,再也不用费尽心思自己手工打造(编译)各种三方库了!

 

0. 为什么 msys2 ?

Linux 早就成为 C/C++ 程序员最主要的广阔天地,工作机会多,平均薪水相对高。

当然,我们也不会放弃在Windows下写C/C++的学习。

结论就是,学 C/C++,我们还是一如既往地,坚持 “跨平台” 的策略,外加坚持服务端为主,桌面程序也不放手。

考虑到多数同学从小接触计算机,都是从 Windows 开始,工作也往往还有些重要的任务(比如上班玩游戏)还需要在Windows下完成,,我们的学习需要准备一个在Windows下运行,但同时支持开发Windows和Linux程序的环境。

这样的环境有(带勾项是d2school已上架或准备上架的课程):

  1. 【WSL2】✓ :微软提供的在Windows下直接运行Linux的重量级环境(你可能好奇微软为什么要干这种看似为别家平台作嫁衣的事?答案参考上面我们刚刚读过的文字)。评价:WSL2 基本就是一个Linux平台,在它上面编译出来的 C/C++程序,并不能在 Windows 直接运行,这一点让它没有成为我们的学习首选环境。它更适合那些必须编写 Linux 程序(典型的如服务器程序),但日常工作在 Windows,不想在两个系统来回切换的专业开发人员。不过,如何使用 VSCODE + WSL2 编程,会出现在本课程靠后点的课堂;
  2. 【VSCODE 加 Remote-SSH 远程开发 Linux 程序】✓:你需要一台独立的运行 Linux 系统的服务器。通常这是因特定原因而离不开Windows的专业选手的做法,虽然我很少用,但后面的课程也会讲;
  3. 【浏览器在线开发】✓ :相当于轻量级的远程开发,只要有浏览器,能上网上,就能写C/C++代码,编译、调试……适合初始学习,详见:课堂-第2学堂 - 打开浏览器,线上玩转C++;
  4. 【mingw64-gcc 编译器】✓:这是我们在更入门的C++教程中使用的方法(见本站课程:课堂-第2学堂 - 安装并集成MinGW-w64))。优点是初始安装、配置的东西最少,但它只提供可在Windows下使用GCC编译器套件,不提供现存于世界的 C/C++丰富的第三方开发库;
  5. 【Cygwin】:第三方提供的 Windows 下的模拟 Uinix / Linux 环境的软件,比较古老,写出来的程序在Windows 下运行性能比较差;
  6. msys2】✓: 也是一个 Windows 下的 Linux 环境。

我们选择最后一项 msys2,原因如下。

  1. 成熟,有很多工业应用使用它作为开发环境,大家学了不会白学(mingw64-gcc 也成熟);
  2. 编译出来的程序可以 纯 Windows 环境运行;
  3. 非常重要的一点:和真正的 Linux 一样,自带包管理器,方便我们在 C/C++ 程序中,使用大量的C/C++成熟、强大的开发包,无需我们手工编译,比如 asio、boost、wxWidgets、openssl 、josncpp、zip……。本课附录有此项信息的更多内容;
  4. 比WSL2或Cygwin轻量(当然,也不会小);
  5. 同时支持多种最主流的两大开源C/C++编译器:GCC(源于Linux)和CLang(源于Apple),支持32位和64位系统,支持 Windows 的新旧 C 运行库,支持C/C++各种复杂开发配置选项,如异常实现、线程实现等,更贴近工作中的实际开发状态;
  6. 不熟悉 Linux 的同学可借其开始了解 Linux ,为后面在 Linux 开始铺个桥;并且 MSYS2 模拟的是 Arch Linux,该发行版的包升级策略是滚动更新,可简单理解为就是一直在更新,这在实际工作中过于激进,但能让我们及时学习新的软件包。

1. 下载、安装 MSYS2

1.1 下载

国外网站通常很慢,还好,国内许多高校提供镜像,感谢这些学校,咱们使用清华大学的吧。

请打开网址:Index of /msys2/distrib/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

通常你的电脑操作系统是64位的,请在上面网页上,找:msys2-x86_64-latest.exe,如下图:

a6a504084c184e07beb3c6978443cd74.png

 如果你的电脑还是 32 位的系统,是时候换台新电脑了,或者,暂时可选 msys2-i686-lastest.sfx.exe 。名字中多出来的 sfx,意为自解压,官网好像只为32位版本提供了自解压版本,具体差别后续会说。

重要提醒:

后面涉及64位与32位等区别,课程都会特意指出。但本课使用的 msys2 版本,只实测过64位 +Windows10 / Windows11;32位系统,Windows7甚至WindowsXP等没有实测。

 

1.2 安装

1.2.1 安装前必读

  1. 电脑硬盘必须使用 NTFS 文件系统分区格式,基本上Windows都应该是这种分区,但你外接的移动盘有可能不是;
  2. 不要在同一台机器上同时安装 64 位和32位的 msys2,它们生成的用户目录重叠,会打架;
  3. 64位版本安装过程可能需联网,且有可能会卡,请耐心等待,实在不行(都等30分钟以上了,可以考虑取消,然后断网再装)。安装后我们会修改至国内镜像服务器。

1.2.2 64位版本

运行下载后得到的可执行文件(msys2-x86_64-latest.exe ),将弹出安装向导。选择安装目录时,默认为 C:\msys64,如果你的C盘空间不足,建议换一个大一点的磁盘,因为未来还需要不断在此环境下安装各种开发包。更换位置时,请遵守以下要求:目录名仅包含纯英文字母或数字,且不含空格。后续课文均以默认路径,即 C:\msys64 解说。安装后,将在Windows开始菜单内生成 MSYS2 菜单组。

1.2.3 32位版本

运行下载后得到的可执行文件(msys2-i686-lastest.sfx.exe ),将直接运行自解压,完成后,可以和 exe 文件同一目录下,找到 msys32 子目录,请将它直接移动到你希望的位置,后续如有提前32位版本,均以 C:\msys32 解说。因为只是自解压后,所以不会生成菜单项。

 

2. 理解 MSYS2 的 「环境」

我们从64位版本程序生成的菜单组说起。64位版本安装后,将在开始菜单内生成 msys64 的菜单组及菜单项,如:

b0e7b59e26e54f20b7d4fe824dbaadf8.png

 

32 位没有菜单,只能进入 msys32 目录,通过图标及文件名,找到对应的 .exe 文件,比如上图上标为③的 “MSYS2 MSYS”菜单项对应的执行文件,应是 msys2.exe 。如果你熟悉 Windows 操作的话,可以手动为它们创建开始菜单项。

下面我们以 64 位版本讲解 MSYS2的一个重要概念:环境。

操作系统的编写,严重依赖C/C++程序,特别是C。而C/C++的实现存在CPU架构的区别,CPU位数的区别,C/C++编译器的区别、甚至还有C++异常如何实现、线程如何实现等细节上的一大堆区别。每一种区分组合起来,将得到一个恐怖的数目。msys2 在一些细节自行做了选择,但保留了大项上的区别,每一种组合称为一个“环境”。对应上图序号,MSYS2 64 提供的环境有:

  • ① MSYS2 CLANG64 / MSYS2 CLANGARM64 采用 CLANG 编译器,前者是常见的电脑、笔记本,后者可用于 ARM CPU 架构的设备,典型如智能手机。在苹果设备上开发C/C++/OC程序是主力编译器,在LINUX上也有广泛使用,但暂时仍无法代替 GCC的地位;
  • ② MSYS2 MINGW32 / MSYS2 MINGW64 以及 ④ MSYS2 UCRT 64 ,这三者采用 GCC 编译器。MINGW32 用于编译、生成 32位程序。MINGW64 和 UCRT 64 用于编译、生成 64 位程序。其中 UCRT 64 基于微软在 Windows10 以后主推的,新版的 C 运行时库,仅提供64位版本,因此需要你用的是 Windows10/11 的操作系统。UCRT64的介绍见本课堂附录部分。
  • ③ MSYS2 MSYS 这是单纯用于模拟 Linux 的环境,也可以在里面编译程序,但生成的C/C++程序在 Windows 无法单独运行,需要带上 MSYS2.dll 。

我们的课程采用 “④ MSYS2 UCRT64”,如果你用的操作系统是 Windows 7 甚至 XP,那么依据它的位数,请对应用使用 MINGW 64 或 MINGW 32。彼此区别并不大。

重要提醒:

后续操作中,提到进入MSYS2 环境,如无特别说明,均指 UCRT64 或你依据电脑情况选定的环境。如果进错环境,很多操作都可以看似顺利的进行,但容易在后续引发奇奇怪怪的问题。

 

3. 修改软件包更新源

msys2 就是个小 Linux 环境,我们经常需要它升级它,更重要的是,我们需要用它来下载C/C++开发包。相关更新资源的默认服务器在德国,比较慢。我们需要把它切换至国内的镜像服务,下面我们以前面提过的清华大学开源软件镜像服务器为例讲解。(或许有你的母校:北京外国语大学、中国科学科技大学、南京大学、上海交通大学、北京理工大学……)。

  1. 进入 C:\msys64\etc\pacman.d\ 目录,用记事本打开其中的 “mirrorlist.ucrt64”,你将看到一行又一行以 “Server = ” 打头的文本内容;
  2. 搜索 mirrors.tuna.tsinghua.edu.cn,复制所在行,再将它粘贴到文件的第一行(或放在 “## Primayr” 之下的第一行)。回到之前找到的那一行,在它前面加上一个 # 和 空格,以注释它;
  3. 保存文件文件。

尽管我们基本就使用 ucrt64 环境,但其它环境的源,我们也一并改了。以 mingw64 为例,就是打开前述文件夹下的 “mirrorlist.mingw64”,然后重复以上步骤。注意,每个文件的内容都不一样,不可混用!

如果你正在运行 msys2 ,需退出后,以上修改才生效。

 

4. 首次更新 MSYS2

更新源以后,我们来完成首次升级。进入UCRT64 环境(或你选择的环境),在其内输入 :pacman -Suy 并回车。pacman 是 Arch Linux 的包管理器,类似 UBUNTU Linux 的 apt-get。该指令将检查 MSYS2是否有新近更新的内容。我这边的运行效果如下:

cb3cbb2282674532a6af7d9d50dd13aa.png

如果有更新,可输入 Y 字母,或直接直接回车(当提示中的 Y 字母是大写时),即可开始更新,更新后,可能还会提示是否关闭当前MSYS,同样选择输入 Y。

提醒 :如前所述,MSYS的更新是比较频繁的,所以如有需要,可经常执行以上步骤。

另外,这是我们第一次进入 MSYS (的某个)环境,如果你觉得它长得好难看,可以鼠标右键点击,弹出菜单中选 Options 菜单项,可以设置主题,字体。本课堂附录有一个设置样例。

5. 安装指定环境的 GCC 编译器

5.1 安装指定包

注意!不同的 MSYS2 环境,安装的 GCC 包名不一样,同样不能混装。我们先以 UCRT64 为例讲解,其它环境请先不要实际动手操作。

  1. 进入 UCRT64 环境;
  2. 输入 pacman -S mingw-w64-ucrt-x86_64-gcc 并回车;
  3. 后续如有提问,一路选 Y。

各环境需要安装的包名:

环境包名备注
UCRT64mingw-w64-ucrt-x86_64-gcc 
MINGW64mingw-w64-x86_64-gcc 
MINGW32mingw-w64-i686-gcc 
CLANG64mingw-w64-clang-x86_64-gcc-compat,以及 mingw-w64-clang-x86_64-libc++未实测
CLANG32mingw-w64-clang-i686-gcc-compat,以及 mingw-w64-clang-i686-libc++未实测
MSYSGCC 以及 base-devel 

(注:pacman 的一些常见用法,也在本课堂的附录中)。

 

5.2 检测GCC安装结果

以UCRT64环境为例,在其内输入: whereis gcc ,应该得到: gcc: /ucrt64/bin/gcc.exe。注意加粗部分。

或者输入: which gcc ,应该得到: /ucrt64/bin/gcc

确认已安装GCC和当前环境匹配后,大家可以看一下编译器的版本。输入 gcc --version 后,在写本文时,我安装的是 GCC 14.2 的版本,如图:

d13fa8e529634f499ba9921ccd33677e.png

 

你可以输入 gcc -v ,以得到更全面的版本信息。

C/C++编译器显然是在了,不过,它们躲在我们的电脑哪个文件夹里呢?以安装目录 为 C:\msys64,环境为 UCRT64 为例,GCC编译套件的可执行文件,在这里: C:\msys64\ucrt64\bin。这个位置很重要,下一节课我们需要在 VSCODE 中用到它。此处截张图以加深各位印象:

79e25a0156154cdea1728ef645994498.png

如果你用的是传统 MINGW64 环境,对应目录应是:C:\msys64\mingw64\bin
到此,GCC对我们来说,已是眼见为实加落袋为安了,不过,我们还有一件事要做。

 

6. 测试编译

对于一个编译器,还有什么能事情,能比实际用它编译一个程序令人放心呢?

下面我们来演示如何在MSYS2环境下,使用GCC编译一段C++代码,以及在外部宿主环境(Windows)如何运行编译得到的程序;同时讲解如何通过添加编译选项,解决在中文Windows下,常见的代码包含汉字的编码问题解决。

6.1 测试G++编译视频演示

6.1.1 完整操作视频

我们仍然以 UCRT64 为例,进入该环境……先看视频,指令、具体操作步骤以及代码等细节,在视频下面的文字教程中给出。

Windows 下 MSYS 内GCC安装后实测

6.1.2 关键步骤说明

一、打开UCRT64环境的MSYS2。(此时将默认进入模拟Linux中的用户目录,该用户目录由MSYS2的安装程序自动读取当前的Windows用户信自己生成(希望你的Windows用户名不汉字……);

二、输入 mkdir Projects (并回车,下同),创建一个目录用以存储各个编程项目,输入 cd Projects 进入该目录;再输入 mkdir cxx && cd cxx && mkdir hello && cd hello。最终得到当前用户目录下的 Projects/cxx/hello,同时已进入该目录;

三、输入 nano ,进入Linux自带的一个终端版本的纯文本编辑器,然后完整输入 Hello World 的 C++代码,代码见后面;

四、在 nano 里, 先按下 Ctrl + O ,按界面提示,输入文件名 main.cpp 并回车,然后按 Ctrl + X,退出 nano;

五、「可选」,你可以输入 ls (或 dir 也行),列出内容中应能看到 main.cpp 文件,还可以 cat main.cpp 直接在终端内查看文件内容;

六、输入:g++ main.cpp -static -fexec-charset=GBK -o hello.exe (注意,Linux指令需严格区分大小写,另,参数中的 GBK同样应大写),执行后,在当前目录下,将得到一个可执行文件 hello.exe。

七、输入 ./hello.exe ,应能看到程序的输出,,且所含汉字显示正常

八、在 Windows中,进入 MSYS2 安装目录 ,以 C:\msys64 为例,进入 C:\msys64\home\XXX\Projects\cxx\hello,其中的 XXX 换成你的Windows用户名。再进入对应的Windows 控制台(cmd 或 PowerShelll 均可),执行 .\hello.exe 。应能看到程序的输出,且所含汉字显示正常。

简单解释下编码问题:

msys 的终端自身默认使用外部宿主系统的编码,对于 中文 Windows 来说,默认是 GB18030(中国国标),不过,进入 nano 等编辑器时,存储的文本文件仍然是 Linux 默认的 UTF-8 编码。使用 UTF-8 编码的汉字,在输出到使用 GB 18030 编码的控制台,解码结果自然混乱。所以我们使用 -fexec-charset=GBK,以提醒GCC编译 ,代码中的汉字是UTF8-8编码(这是GCC的默认要求),烦请编译器您在编译过程中,将它们顺手转成 GBK 编码(GBK 是 GB18030 的一个子集)。

 

6.2 测试代码

如上所述,它的编码是 UTF-8。

#include <iostream>using namespace std;int main() { cout << "Hello World! - 来自 msys2" << endl; }

7. 附录

附录1-UCRT64 简介

MSVCRT 和 UCRT 是微软的Windows上C标准库的两个变体,前者旧,兼容更多老版本的Windows,后者新。;从 Windows 10 起,它成为 Windows 直接集成的组件。

☞ UCRT

UCRT(Universal C RunTime)支持基于 C 调用约定的稳定 ABI,且谨遵 ISO C99 标准(仅有少数例外)。它将不再绑定到特定版本的编译器。 可以在 Visual Studio 2015 或 Visual Studio 2017 支持的任何 Windows 版本上使用 UCRT。 其好处是使用者不再需要在每次升级 Visual Studio 时都以新版本的 CRT 为目标来更新自己的版本。

全面了解UCRT,请到微软官网:

  • 中文(机翻):将代码升级到通用 CRT ;
  • 英文:Upgrade your code to Universal CRT 。

☞ MSVCRT

MSVCRT(Microsoft Visual C Runtime)默认情况下可在所有Microsoft Windows版本上使用,但由于向后兼容性问题,它停留在过去,不兼容C99并且缺少一些功能。

  • 它不兼容C99,例如printf()函数族,但是…
  • mingw-w64提供了替换函数,使事情在许多情况下与C99兼容。
  • 它不支持UTF-8 locale。
  • 链接到MSVCRT的二进制文件不应该与UCRT的二进制文件混合,因为内部结构和数据类型不同。(更严格地说,不应该混合使用为不同目标构建的对象文件或静态库。
  • 为不同的CRT构建的DLL可以混合使用,只要它们不跨DLL边界共享CRT对象(例如FILE*)。
  • 同样的规则也适用于MSVC编译的二进制文件,因为MSVC默认使用UCRT(如果没有更改的话)。
  • 在每个版本的Microsoft Windows上都可以开箱即用。

 

附录2-pacman 常用指令

  1. 更新MSYS2系统: pacman -Syu ;可拆解为 pacman -Sy (同步,从而发现有哪些更新),和 pacman -Su (实际更新);
  2. 安装指定包:pacman -S 包名 ;包名必须精确。如:pacman -S mingw-w64-ucrt-x86_64-gcc;安装包之前,通常建议先执行第1条指令;
  3. 删除指定包:pacman -R 包名 ;该指令仅删除指定包。如果是 pacman -Rs 包名 ,将同时删除被指定包依赖,且不被其他包依赖的包;
  4. 搜索包:pacman -Ss 关键字; 关键字指包名包含的内容;比如 pacman -Ss GCC 将列出所有GCC的包,如果是已安装的包,列出的包名那一行,尾部带有 [installed] 字样;

更多内容大家上网搜索吧。

 

附录3-了解更多msys2包

如果想快速了解 msys2 当前含有多少软件包(包括工具程序、工具程序依赖包、开发包),可上网其msys2官网查询。查询页网址:https://packages.msys2.org/packages/

基于本课程,本站有《C++第三方精品单兵作战弹药库》课程,让你高效掌握C++世界中“全世界都在用”的轻量工具库,迅速提升你的C++编程解决能力。

 

附录4-MSYS2 终端外观调整

MSYS2 的模拟终端(Windows 下更常称为控制台,不过,现在也开始叫“终端”了。)默认字体实在太小(特别是对我这种眼花的老人),下面我们为它调整下配置。

不管从哪个环境进入设置,调整效果对所有环境起作用,不过我们还是以UCRT64为例。

进入UCRT64 环境,然后右键点击模拟终端标题栏或窗口内容区域,在弹出菜单中,选 “Options…”

☞ Looks 配置

在 Looks 页,可以调整终端的前景色(Foreground…)、背景色(Background…)、光标样式(Cursor…)……个人感觉不要在这些细节花时间,从 Theme 栏里,选一个你看着舒服的就行,我选的是:“monokai-dimmed”。

Transparency 可以设置为 “Low”,即低透明度。如果你后面发现自己经常会在里面写代码——按我们的课程,这不太可能,因为下节课,我们就要教大家在 VSCODE 里使用今天安装的编译器——建议把 “Opaque when focused” 勾上,这样,模拟终端将仅在你不理它(即该窗口失去焦点)时才变得透明。

如果你是个讲究人,这个页面上有个 “Color Scheme Designer”……点下去将带你到一个在线的配色设计器。

☞ Text 配置

点击 “Select…” 按钮,选择一个你喜欢,且合适的字体(建议使用 Cascadia Mono,这是Windwos自身控制台的字体)。最主要是,将字体大小从原来的 9pt ,改成 12pt 。

提醒:Local 和 Character set 项,暂时不要改它。

☞ 其他配置

其他项建议暂不要改,除非你非常熟悉。

☞ 配置效果

我配置的最终效果如下图(鱼是桌面背景)。

18321865fa454d2eb5ac6d59caf43b80.png

 

附录5-MSYS挂接Windows新终端

注:本附录相关操作应该仅支持 Windows 10 及以上版本。

在Windows上支持 cmd 命令,打开一个新版的终端窗口,请观察下面的截图并作对比,如果你找不到图中位置的下拉菜单(点红圈标注的小三角),那就是不能配置的旧版。

4652484304ff4a1e8daea0d81cb1a56a.png

点击上图的设置菜单项,在弹出设置界面左侧栏,找靠底部的 “+ 添加新配置文件”,如图:

bc1a97f9e7304fa0baaee1ab79792555.png

 

在出现的页面顶部,选 “新建配置文件”,然后将进入一个标题为“Profile N” (N是一个数字),的页面,然后按下配置填写(未提到的项不用修改)。我们使用的仍是 UCRT64环境,且 msys2 安装目录为 c:\msys64。

填写内容说明
名称MSYS2-UCRT64此处示例 UCRT64环境
命令行C:\msys64\msys2_shell.cmd -defterm -here -no-start -ucrt64如不是UCRT64环境,最后的参数 -ucrt64,相应修改,如 -mingw64、或 -msys 等
启动目录C:\msys64\home%USERNAME%安装目录以 C:\msys64 为例,即 msys中的用户目录
图标C:\msys64\ucrt64.ico如是其它环境,请更换成对应的 .ico 文件

确保以上填写无误后,点击右下角的保存按钮,然后关闭设置页。现在,我们就可以在Windows的新版控制台,集成使用 MSYS2的环境了,如图,是一个打开 msys2-ucrt64 、cmd、powershell 的 Windows 控制台。

4e12c5b54d3d411e98521a2f98789816.png

大功告成,下一节课,我们将在 vscode 中集成本课安装的编译器。

 

 

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

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

相关文章

i春秋云境靶场之CVE-2022-26965

1.环境搭建 提示我们后台存在rce,也就是命令执行漏洞 2.访问环境 cm - cmshttp://eci-2zeh0yf0ohu88wr26unq.cloudeci1.ichunqiu.com/ 我们可看到admin,我们点击&#xff0c;发现是一个登录页面&#xff0c;我们输入弱口令admin,登录成功 3.文件上传 我们在选项——选择主题…

构造器和UML类图

1.构造器 1.1 详解 类的成员&#xff1a;构造器 构造器的作用 初始化对象&#xff1a;构造器用于设置对象的初始值&#xff0c;确保对象在创建时是有效的。提供灵活性&#xff1a;可以重载构造器&#xff0c;以便在创建对象时提供不同数量或类型的参数&#xff0c;从而支持…

[CR]厚云填补_条件扩散模型用于SAR到光学图像转换

Conditional Diffusion for SAR to Optical Image Translation Abstract 合成孔径雷达(SAR)提供全天候、全天高分辨率成像&#xff0c;但其独特的成像机制往往需要专家解释&#xff0c;限制了其广泛的适用性。为了应对这一挑战&#xff0c;提出了一个生成模型&#xff0c;该模型…

如何制作低代码开发的视频教程?

如何制作低代码开发的视频教程&#xff1f; 随着数字化转型的加速&#xff0c;越来越多的企业和组织开始采用低代码开发平台来加速应用程序的构建。对于许多开发者和业务人员来说&#xff0c;学习如何使用这些平台可以显著提高工作效率。因此&#xff0c;创建一份清晰、实用且…

JavaScript进阶--作用域-函数进阶

Javascript进阶 作用域 分类 局部 函数 >执行完变量被清空块 >用{}包住 >有可能被无法访问 【用var声明的变量】 全局 > 在script标签和.js文件最外层进行声明 作用域链 最底层的变量查找机制 > 在函数被执行时&#xff0c;会优先查找当前函数作用域中查找…

路径跟踪之导航向量场——二维导航向量场

今天带来一期轨迹跟踪算法的讲解&#xff0c;首先讲解二维平面中的导航向量场[1]。该方法具有轻量化、计算简便、收敛性强等多项优点。该方法根据期望的轨迹函数&#xff0c;计算全局位置的期望飞行向量&#xff0c;将期望飞行向量转为偏光角&#xff0c;输入底层控制器&#x…

【STM32单片机_(HAL库)】4-5-3【定时器TIM】【感应开关盖垃圾桶项目】项目实现

1.项目需求 以下几个事件触发时&#xff0c;垃圾桶自动开盖&#xff0c;并伴随蜂鸣器短响一声&#xff0c;同时 LED 灯闪烁一下&#xff0c;2秒后自动关盖&#xff1a; 检测到有人靠近检测到有震动按下按键 KEY1 2.硬件 STM32单片机最小系统震动传感器模块蜂鸣器模块&#…

CentOS 6文件系统

由冯诺依曼在 1945 年提出的计算机五大组成部分&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设 备&#xff0c;输出设备。 1. 硬盘结构&#xff1a; &#xff08;1&#xff09;机械硬盘结构&#xff1a; 磁盘拆解图&#xff1a; 扇区&#xff0c;…

研发中台拆分之路:深度剖析、心得总结与经验分享

背景在 21 年&#xff0c;中台拆分在 21 年&#xff0c;以下为中台拆分的过程心得&#xff0c;带有一定的主观&#xff0c;偏向于中小团队中台建设参考&#xff08;这里的中小团队指 3-100 人的团队&#xff09;&#xff0c;对于大型团队不太适用&#xff0c;毕竟大型团队人中 …

UGUI(六大UI根基组件)

Rect Transform 各种参数 是显示pos还是width/height 还是left/top/right/bottom之类巴拉巴拉&#xff0c;各种混合的展示baby&#xff0c;都是看anchor的设置 pivot的设置影响具体数值 至于blueprint mode &#xff0c;就是用了之后框框不变&#xff0c;who wanna do thi…

理解PID(零)——什么是PID

PID控制器是一种广泛用于各种工业控制场合的控制器&#xff0c;它结构简单&#xff0c;可以根据工程经验整定参数Kp,Ki,Kd. 虽然现在控制专家提出了很多智能的控制算法&#xff0c;比如神经网络&#xff0c;模糊控制等&#xff0c;但是PID仍然被广泛使用。常见的PID控制器有位置…

开源全文搜索(搜索引擎)

吃水不忘挖井人&#xff0c;介绍Doug Cutting大牛是十分有必要的。 最早&#xff0c;接触到搜索引擎&#xff0c;知道有个Nutch&#xff08;开源搜索引擎&#xff09;&#xff0c;于是开始查看Nutch相关的资料&#xff0c;发现了Nutch的创始人Doug Cutting&#xff0c;随着项目…

初创公司首选HR软件推荐与功能解析

初创企业需HR软件自动化招聘、文书、日常任务及合规管理&#xff0c;提升效率。ZohoPeople是理想选择&#xff0c;性价比高&#xff0c;版本多样&#xff0c;满足不同需求。 1、简化招聘流程 您一直在寻找杰出的人才&#xff0c;以助您的初创企业飞跃发展。您选择的HR软件应该…

Python数字图像处理实战——基于OpenCV实现多种滤波器(附完整代码和结果图)

Python数字图像处理实战——基于OpenCV实现多种滤波器&#xff08;附完整代码和结果图&#xff09; 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测…

极客兔兔Gee-Cache Day7

protobuf配置&#xff1a; 从 Protobuf Releases 下载最先版本的发布包安装。解压后将解压路径下的 bin 目录 加入到环境变量即可。 如果能正常显示版本&#xff0c;则表示安装成功。 $ protoc --version libprotoc 3.11.2在Golang中使用protobuf&#xff0c;还需要protoc-g…

LSTM时间序列模型实战——预测上证指数走势

LSTM时间序列模型实战——预测上证指数走势 关于作者 作者&#xff1a;小白熊 作者简介&#xff1a;精通python、matlab、c#语言&#xff0c;擅长机器学习&#xff0c;深度学习&#xff0c;机器视觉&#xff0c;目标检测&#xff0c;图像分类&#xff0c;姿态识别&#xff0c;…

影刀RPA实战:Excel排序、替换与格式

1.实战目标 今天继续介绍影刀RPA操作Excel的指令&#xff0c;内容替换&#xff0c;数据排序与单元格格式设置&#xff0c;这几个功能在日常工作中使用率还是比较频繁的。我们可以使用影刀来处理这些重复繁琐的工作。 2.内容替换 我们手动替换内容时 打开Excel文件&#xff1…

鸿蒙进入“无人区”:该如何闯关?

按照华为方面的说法&#xff0c;“打造鸿蒙操作系统是三大战役&#xff0c;目前已经完成了底座和体验两大战役&#xff0c;第三大战役则是生态。”生态固然重要&#xff0c;但要让鸿蒙与当今世界主流操作系统抗衡&#xff0c;乃至成为新一代操作系统中的翘楚&#xff0c;其实还…

上市四天暴涨又暴跌,扫描全能王背后公司坐上“过山车”

股价四天涨五倍&#xff0c;遇到回调跌一半&#xff0c;扫描全能王母公司——合合信息&#xff0c;一上市就坐上了“过山车”。 合合信息其实早在2021年就向科创板申请上市&#xff0c;并在2023年成功过会&#xff0c;但直到9月13日才开启申购&#xff0c;IPO之路一走就是三年…

springboot-网站开发-thymeleaf引擎报错找不到指定的页面模板文件

springboot-网站开发-thymeleaf引擎报错找不到指定的页面模板文件&#xff01; 这种错误的情况&#xff0c;发生&#xff0c;一般都是因为&#xff0c;我们自己的html模板文件&#xff0c;存档位置并不是在默认的templates下面。而是我们自己新建的一个子目录里面。然后&#x…