Windows 编译环境介绍

2022-10-17 18:25:09 +08:00
 loken2020

windows 环境下编译 C/C++ 项目,会涉及到以下 4 个软件,或者说是工具套件。

1 ,MSVC:Windows 原生编译套件,全称 Microsoft Visual C++。vs2019 默认就是使用这个编译套件。

2 ,MinGW:GCC 编译工具链 在 Windows 平台的移植。

3 ,Cygwin:不仅仅是把 GCC 编译工具链移植到 Windows 平台,还有相关的 Linux 命令也有移植,ls ,mkdir ,clear 之类的命令也有移植。

4 ,MSYS2:集合 MinGW 的 GCC 编译工具 链 跟 Cygwin 的配套工具。

虽然 MinGW 跟 Cygwin 都提供了 gcc 编译器,但是 MinGW 的 gcc.exe 是更原生一些的,没有依赖 cygwin1.dll 。而 Cygwin 的 gcc.exe 依赖 cygwin1.dll 。

Cygwin 平台大部分的软件都依赖 cygwin1.dll ,这个 dll 是一个 POSIX 模拟层,模拟了很多 Linux 的函数,fork, spawn, signals, select, sockets 。

因为 Cygwin 有模拟层,所以他的兼容性跟移植性会更好一些。也就是说如果你要移植一个 Linux 的软件,用 Cygwin 开发效率会更高一些。

而 MinGW 的 gcc.exe 实际上跟 MSVC 的 cl.exe 是类似的,编译出来的都是原生的 windows 程序。

然后 MSYS2 使用的编译工具链是 MinGW 的 gcc ,但是 ls ,mkdir ,clear 之类的命令 是基于 Cygwin 修改过来的。

MSYS2 更注重于编译生成原生的 Windows 应用,而 Cygwin 专注于移植,基于 cygwin1.dll 模拟层来移植。

例如 MSYS2 使用的 C 语言运行时库 是 MSVCR ,而 Cygwin 用的是 newlib 运行时。

https://ffmpeg.xianwaizhiyin.net/base-compile/windows.html

1578 次点击
所在节点    程序员
4 条回复
FrankHB
2022-10-17 20:44:22 +08:00
你这也太水了,连 MSYS2 自带一大坨不同 triple 都没说清楚。

https://github.com/FrankHB/pl-docs/blob/master/zh-CN/mingw-vs-mingw-v64.md

(还没更新 ucrt64/clang32/clang64 和接下来可能上的 mcfgthread……)

ABI……谅你折腾 ffmpeg 的,C 艹部分的稀烂玩意儿不碰就算了。但是只要够 active ,ABI breakage 照样能分分钟喂你饱:

github.com/msys2/MINGW-packages/pull/13528
github.com/msys2/MSYS2-packages/pull/3229
loken2020
2022-10-17 20:57:43 +08:00
@FrankHB 感谢大佬的指点。
julyclyde
2022-10-18 09:08:55 +08:00
建议不要发业界早已成熟的内容了
这种重复工作并不会按你想象的给你镀金
laizenan
112 天前
@FrankHB 感谢大佬分享这块内容,补全知识盲区了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX