V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ckr2002
V2EX  ›  C++

mingw 具体做了什么?

  •  
  •   ckr2002 · 99 天前 · 2666 次点击
    这是一个创建于 99 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    对于 mingw, 我的理解:

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

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

    我的理解对吗?

    6 条回复    2024-12-07 07:57:34 +08:00
    ccpp132
        1
    ccpp132  
       99 天前
    还有 win32 api 环境下的基础库,runtime ,工具链等。反正在非 posix 环境下要运行差了啥就补上。
    tool2dx
        2
    tool2dx  
       99 天前
    现在 obj 格式似乎没那么重要了,以前是 vs 和 gcc 相互不兼容,后来 clang 加了调试兼容,现在 vs 都带上 clang 编译器了。

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

    至于 binutils 和 gcc 的 PECOFF 支持,这个大概跟 MinGW 直接关系不大,应该是其他人做好,然后 MinGW 编译出的 GCC 在 configure 时启用的。
    ckr2002
        5
    ckr2002  
    OP
       95 天前
    @secondwtq , 也就是说 gcc 本身支持 PECOFF target , 对吗?
    secondwtq
        6
    secondwtq  
       19 天前
    @ckr2002 #5 这个问题要有准确答案需要去考古,如果 MinGW 是第一个实现在 Windows 上用 GCC 的,那么大概他们自己在 GCC 里做了不少相关的工作,把这部分算进广义的 MinGW 项目里面也可以。
    不过 GCC 也挺老的,很早就支持很多平台,可能早就有 COFF 的支持,然后改一下就能。
    (顺便,UEFI 只支持 PECOFF 格式的 bootloader ,不过现在的实现貌似都是手搓一个文件出来)

    但是无论哪种情况,代码应该是放在 binutils 和 GCC 那边的,只是 MinGW 的人可能会有 commit 权限之类的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1209 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:18 · PVG 02:18 · LAX 10:18 · JFK 13:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.