使用 MinGW 进行 Windows 编程

Posted

技术标签:

【中文标题】使用 MinGW 进行 Windows 编程【英文标题】:Windows programming using MinGW 【发布时间】:2014-11-25 12:08:38 【问题描述】:

首先,请原谅我对这些问题的无知,我已经进行了搜索,目前还没有找到任何全面的答案。

我计划学习如何为 Windows 进行开发,但是我非常喜欢 GNU 工具链,并且在我对底层基础知识感到更加熟悉之前,我真的不想继续使用像 Visual Studio 这样的大型环境。

据我了解,可以下载 Windows SDK,其中包含构建原生 Windows 应用程序所需的头文件和库。

SDK 真的只是库和头文件的集合吗?如果是这样,按照我的逻辑,应该可以将 MinGW 指向这些库/头文件,然后像往常一样简单地构建。

当我使用 Visual Studio 构建时,我看不到正在定义的预处理器指令、链接的内容等等,因为我仍在学习,我希望能够准确地知道发生了什么,最好是我必须手动定义,链接等。因此问题。

那么,我想知道的是:我的逻辑是否正确?

再次抱歉,如果问题是初级的,我仍在学习。

附:我打算在 Windows 环境中开发 Windows 应用程序,这不是关于交叉编译的问题。

谢谢!

【问题讨论】:

手动定义、链接等 cl 是编译器,link 是链接器。走吧:] 所以从命令行我可以像 gcc -c 和 ld 一样简单地调用 cl 和链接?这会迫使我自己链接每个 WinAPI 库/定义所有预处理器宏吗? :) 基本上,我想拥有所有没有为我完成的好东西,这样我就可以了解真正发生的事情。 首先决定是否需要MinGW。已经不清楚了。不,MS 程序的命令行选项当然与 GCC 不完全相同(尽管有些相同)。并阐明你想用预处理器实现什么。您可以编写程序而无需定义任何内容。你想自己写标题吗?为什么? 实际的工具链与我无关。我只是希望能够有一个不太高级的工具来创建 Windows 程序。我想从命令行编译并且必须专门链接相关的库。 Visual Express 为我完成了这一切。我不想要那个。任何工具链都是公平的游戏! 我不想编写标题,我想对预处理器定义进行特定控制,例如确定 Unicode 等内容的定义。我想了解我需要链接哪些库而不是IDE 默默地为我做这件事。它与重新发明***无关,只是更接近底层实现的现实! 【参考方案1】:

MinGW 与官方 Windows SDK 不兼容,原因之一 因为 SDK 包含许多 VS 特定的东西(相对于 GCC 基础 在 MinGW 上)。 MinGW 已经改编了许多必要的文件,并且适用于许多程序 这就够了。

您不需要知道某些程序的 VS 项目设置; MinGW 仍然是 GCC 的核心,并被照此使用。如果可以编译 在 Linux 上使用 GCC 的程序,学习如何使用 MinGW 并不难。

如果您需要功能/结构/等。还不是其中的一部分, 除了自己进行适应之外,您很不走运, 视情况而定,可以是非常容易或非常困难之间的一切。 此外,正确的线程使用有点古怪(有一些“隐藏”的陷阱, 这在实际程序中可能会被忽视多年,但随后......)。

(虽然这对 VS 不利,但您将获得 C++11/14(而 VS 没有 甚至完成了 11,请参阅 link),在许多情况下进行了更好的优化等)

如果您要选择下载的具体内容,请查看 WinGW-W64 而不是 “原始”旧的。原来的项目有点停了,已经很差了 lib 支持与 W64 相比,没有 64 位编译器等。(不要误解 “W64”,也可以用于32位程序)

【讨论】:

not even close 有点夸张了吧? 嗯,“关闭”是什么意思当然是自以为是,但是blogs.msdn.com/b/vcblog/archive/2014/11/17/…尤其是表的后半部分,有很多“不”。至少“未完成”是一个事实,以这样的速度,它可能不会在 2020 年之前完成。 确切地说是MinGW-W64,而不是WinGW-W64

以上是关于使用 MinGW 进行 Windows 编程的主要内容,如果未能解决你的问题,请参考以下文章

初学c语言用啥系统好?

win10环境下MinGW和MSYS的安装与配置

[编译] 2minGW gcc在windows搭建编译win32程序环境

将 inotify 与 MinGW 一起使用

我在windows下安装了MinGW和msys,并在桌面上有了mingw shell的图标,请问我怎么才能应用vim来写程序呢

MinGW和MSYS区别和关系以及MinGW&MSYS在Win7中安装并编译x264