mingw 具体做了什么?

49 天前
 ckr2002

我们知道编译器通常由三部分组成: 前端、中间表示(优化器)、后端

对于 mingw, 我的理解:

  1. mingw 使用了 gcc 的编译器前端和 IR 优化

  2. mingw 后端生成了符合 COFF 规范的 obj 文件, 而传统的 gcc 在 linux 平台下生成的是符合 elf 规范的 .o 文件

我的理解对吗?

2343 次点击
所在节点    C++
5 条回复
ccpp132
49 天前
还有 win32 api 环境下的基础库,runtime ,工具链等。反正在非 posix 环境下要运行差了啥就补上。
tool2dx
49 天前
现在 obj 格式似乎没那么重要了,以前是 vs 和 gcc 相互不兼容,后来 clang 加了调试兼容,现在 vs 都带上 clang 编译器了。

在 mingw 环境出道前,还有一个类似的 cygwin ,算深度包装 linux api ,会带一堆 DLL 。mingw 出来后,很多 api 都变成了静态库,还是方便不少。
ysc3839
49 天前
MinGW 全称 Minimalist GNU for Windows ,个人理解是:一个最精简的项目,让 gcc 相关工具链,1.能编译出原生 Windows 应用,2.能在 Windows 上运行。除了这两者以外的功能,例如 POSIX 兼容层,MinGW 不会支持。
secondwtq
47 天前
MinGW 项目本体应该不包含 GCC ,它是提供一个能让 GCC 编译、运行的环境。
当然这个表述有点问题,因为既然你已经以这个目的做了一套环境,那么 by definition 你最好也提供一套 GCC 工具链。

至于 binutils 和 gcc 的 PECOFF 支持,这个大概跟 MinGW 直接关系不大,应该是其他人做好,然后 MinGW 编译出的 GCC 在 configure 时启用的。
ckr2002
45 天前
@secondwtq , 也就是说 gcc 本身支持 PECOFF target , 对吗?

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

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

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

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

© 2021 V2EX