- A+
「Pygors系列」一句话导读:
MinGW-w64只有编译器,MSYS2带着更新环境,WSL2实用性比较高
历史与渊源
Windows平台 | Linux平台 | |
二进制兼容 | WSL2:运行Linux程序 | Wine:运行Windows程序 |
接口兼容 | CygWin:编译Linux程序 | Winelib:编译Windows程序 |
编译器兼容 | MinGW-w64:编译Linux程序 |
Cygwin
原 Cygnus 出品(已被红帽收购),目前是 RedHat 名下的项目。项目的目的是提供运行于 Windows 平台的类 Unix 环境(以 GNU 工具为代表),为了达到这个目的,Cygwin 提供了一套抽象层 dll,用于将部分 Posix 调用转换成 Windows 的 API 调用,实现相关功能。这里面最典型的,最基本的模拟层就是那个 cygwin1.dll。除此之外,随着 Linux 系统的发展壮大,目前的 Cygwin 已经不仅仅提供 POSIX 兼容,因此也顺带多了更多模拟层的依赖关系。
MinGW
Minimalist GNU for Windows,用于开发原生(32位) Windows 应用的开发环境。它主要提供了针对 win32 应用的 GCC、GNU binutils 等工具,以及对等于 Windows SDK(的子集)的头文件和用于 MinGW 版本 linker 的库文件(so、a等,而不是 VC 的 lib)。
MSYS
由于 MinGW 本身仅代表工具链,而在 Windows 下,由于Windows的terminal cmd窗口使用感受太差,以及配套的命令行工具不够齐全,因此,MinGW 开发者从曾经比较旧的 Cygwin 创建了一个分支,也用于提供类 Unix 环境。但与 Cygwin 的大而全不同,MSYS 是冲着小巧玲珑的目标去的,所以整套 MSYS 以及 MinGW,主要以基本的 Linux 工具为主,大小在 200M 左右,并且没有多少扩展能力。
MinGW-w64
A complete runtime environment for gcc&llvm for 32 and 64 bit Windows.
前面提到的 MinGW,是针对 32 位 Windows 应用开发的。MinGW-w64 则是新一代的 MinGW,支持更多的 API,支持 64 位应用开发,甚至支持 32 位 host 编译 64 位应用以及反过来的“交叉”编译。除此之外,它本身也有 32 位和 64 位不同版本,其它与 MinGW 相同。
MSYS2
Software Distribution and Building Platform for Windows
由于 MinGW 万年不更新,MSYS 更是,Cygwin的许多新功能 MSYS 没有同步过来,于是 Alex 等人建立了新一代的 MSYS 项目。仍然是 fork 了 Cygwin(较新版),但有个更优秀的包管理器 pacman
MSYS2 的主要重点是为本地 Windows 软件提供构建环境,并且使用 Cygwin 的部分保持在最低限度。 MSYS2 为 GCC、mingw-w64、CPython、CMake、Meson、OpenSSL、FFmpeg、Rust、Ruby 等提供最新的原生构建。
WSL
Windows Subsystem for Linux(适用于Windows的Linux子系统)
WSL的核心是模拟Linux内核,因而文件可放在本地,缺点是兼容性与文件系统性能比较差。
WSL2
适用于Windows的Linux子系统体系结构的一个新版本,它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
WSL2的核心是使用真正的Linux内核,增强兼容性和性能的同时,缺点是使用模拟硬盘存放Linux文件。
安装与配置
- 只需编译Linux程序,安装MinGW
- 需要编译Linux程序和Linux工具环境,安装MSYS2
- 直接运行Linux程序,安装WSL2
安装MinGW
MinGW安装器:
下载地址1:MinGW下载
下载地址2:SourceForge (MinGW w64)
下载地址3:win-builds (MinGW w64)
安装MSYS2
访问MSYS2官网,下载官网首页的安装包。
https://mirrors.tuna.tsinghua.edu.cn/msys2/
http://mirrors.ustc.edu.cn/msys2/
Windows 7支持
2022-12-16 - Dropping Windows 7 support for the MSYS2 installer
The latest release of the MSYS2 installer (v2022-12-16) has dropped support for Windows 7. It will show an error message and abort if started on Windows 7.
安装完成以后,执行下面命令,建议执行两遍,第一遍执行完会自动退出。
或者第一遍执行pacman -Sy
,第二遍执行pacman -Su
。
pacman 是Arch Linux 的包管理器,类似于ubuntu的apt,详细参考 pacman命令介绍。
-S是主命令,安装安装的包的作用,后面的是子命令。
-u, --sysupgrade 升级所有已安装的软件包
-y, --refresh 从服务器下载新的软件包数据库
2.将msys2的默认镜像改成国内的地址,这样以后msys的下载速度会比较快。
进入msys2安装路径下的pacman.d文件夹,里面的mirrorlist.mingw32、mirrorlist.mingw64、mirrorlist.msys三个文件是我们要修改的。
安装需要用到的包
利用-S命令安装所需要的包,像base-devel和mingw-w64-x86_64-toolchain都是一类包,我们可以通过序号选择。
pacman -S base-devel
pacman -S mingw-w64-x86_64-toolchain
ucrt,全称Universal C Runtime,通用C运行时库。
msvcrt,全称Microsoft Visual C Runtime Library,其实他和ucrt是一个东西。提供了print,malloc等基本C语言库函数的实现,只是ucrt比较新,win10版本以后作为系统组件。
【异常处理模型:】
异常处理在开发中非常重要,你在开发的过程中,大部分的时间会耗在处理各种异常情况上。
【64位:】
如果你之前选择了 64位,则这里有两个异常处理模型供你选择,seh 是新发明的,而 sjlj 则是古老的。
seh 性能比较好,但不支持 32位。 sjlj 稳定性好,支持 32位。
【32位:】
选择了 32位 后,则可以用 dwarf 和 sjlj 两种异常处理模型。同样的,dwarf 的性能要优于 sjlj ,可以它不支持 64位 。
操作:建议选择 dwarf
安装WSL2
先决条件
必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。
安装 WSL 命令
现在,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl --install 命令,然后重启计算机。
WSL 的基本命令参考
https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
(全文完)