mingw 具体做了什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ckr2002
V2EX    C++

mingw 具体做了什么?

  •  
  •   ckr2002 2024-09-18 17:29:36 +08:00 3331 次点击
    这是一个创建于 452 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    对于 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  
       2024-09-18 17:59:38 +08:00
    还有 win32 api 环境下的基础库,runtime ,工具链等。反正在非 posix 环境下要运行差了啥就补上。
    tool2dx
        2
    tool2dx  
       2024-09-18 18:04:55 +08:00
    现在 obj 格式似乎没那么重要了,以前是 vs 和 gcc 相互不兼容,后来 clang 加了调试兼容,现在 vs 都带上 clang 编译器了。

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

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

    但是无论哪种情况,代码应该是放在 binutils 和 GCC 那边的,只是 MinGW 的人可能会有 commit 权限之类的。
    /div>
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3820 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 05:16 PVG 13:16 LAX 21:16 JFK 00:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86