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

Windows 编译环境介绍

  •  
  •   loken2020 · 2022-10-17 18:25:09 +08:00 · 1889 次点击
    这是一个创建于 768 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    4 条回复    2024-01-17 14:25:07 +08:00
    FrankHB
        1
    FrankHB  
       2022-10-17 20:44:22 +08:00   ❤️ 2
    你这也太水了,连 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
        2
    loken2020  
    OP
       2022-10-17 20:57:43 +08:00
    @FrankHB 感谢大佬的指点。
    julyclyde
        3
    julyclyde  
       2022-10-18 09:08:55 +08:00   ❤️ 1
    建议不要发业界早已成熟的内容了
    这种重复工作并不会按你想象的给你镀金
    laizenan
        4
    laizenan  
       311 天前
    @FrankHB 感谢大佬分享这块内容,补全知识盲区了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2802 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 00:16 · PVG 08:16 · LAX 16:16 · JFK 19:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.