C++ Can g++;/minGW是否可以很好地使用Windows SDK?Visual Studio是唯一的选项吗?

C++ Can g++;/minGW是否可以很好地使用Windows SDK?Visual Studio是唯一的选项吗?,c++,windows,visual-studio,g++,mingw,C++,Windows,Visual Studio,G++,Mingw,Windows XP上的g++和minGW可以使用Windows SDK吗 具体来说,为什么g++无法编译: #include <stdio.h> #include <windows.h> int main(void) { printf("!!!Hello World!!!"); return EXIT_SUCCESS; } 我从一开始就有一大堆编译错误 winnt.h:666:2: #error Must define a target architecture

Windows XP上的g++和minGW可以使用Windows SDK吗

具体来说,为什么g++无法编译:

#include <stdio.h>
#include <windows.h>

int main(void) {
 printf("!!!Hello World!!!");
 return EXIT_SUCCESS;
}
我从一开始就有一大堆编译错误

winnt.h:666:2: #error Must define a target architecture.
我已经安装了

背景 我正在从事一个大型实时图像处理软件项目,到目前为止,该项目使用了g++、minGW和gnu make文件(手工编写)。对于一个新特性,我需要与具有的接口。framegrabber SDK依赖于Windows SDK中的头文件


我需要学习Visual Studio还是有其他方法?

我每天使用MinGW编译Windows程序,没有任何问题。您的安装一定有问题-请尝试上的版本

编辑:只需重新阅读您的帖子-您不需要像现在这样指定include目录,而且可能不应该这样做。此外,您可能需要(也可能不需要)略显神秘的-mwindows标志。我刚刚使用MinGW(TDM build)g++4.4.1编译了您的程序,命令行为:

g++ main.cpp
绝对没有问题

更多信息:为了让您知道-mwindows标志的作用,GCC文档说:

此选项适用于Cygwin和 MinGW目标。它指定一个GUI 应用程序将由以下程序生成: 指示链接器设置 PE标头子系统类型应适当


就我个人而言,我从未觉得有必要这样做,但我的Windows应用程序都是命令行工具或服务器。

在包含这些Windows标题之前,请尝试添加这些定义

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501
编辑:我的gcc编译你的脚本没有问题(也没有这些定义)。
我正在使用mingw的GCC4.40(alpha?!)

根据mingw用户邮件列表中的讨论,您可能会遇到Windows SDK的兼容性问题,您可能需要自己解决这些问题


乔治彼得罗夫[2010年12月27日;上午8:33]:

你好,

我正在尝试开发一个EVR(特定于Vista/7的视频演示API) MSYS/MinGW上MPlayer的渲染器。问题是我有Windows SDK v7.1,我需要它的evr.h。如果我想把它复制到MinGW的 包括目录及其包含的12个头文件 编译几乎是不可能的就在这一刻,我犯了很多错误 包括evr.h,没有别的。我调查发现我不能 直接将Windows SDK头文件与MinGW一起使用,因为它是附带的 有自己的头文件,有时非常非常不同。 问题在于Media Foundation/Enhanced Video Renderer标头 文件不是MinGW头文件的一部分

我该怎么办

  • Windows SDK头文件问题:


罗斯岭[2010年10月10日;晚上10:16]:

在大多数情况下,Windows SDK标头与不兼容 海湾合作委员会。如果您需要的某个特定头文件不存在 在win32api堆中,如果缺少所需的内容,则可以 尝试只使用Windows SDK中的一个标题,然后使用 其余部分使用win32api

也可以只使用Windows SDK头,避免使用 win32api标题完全相同,但您需要修复一些 密钥头文件中存在问题。我过去只是修改标题,但是 Windows SDK实际上变得更加兼容,现在我 使用包装器解决问题。

                                    Ross Ridge
有些头文件和库非常有用 基本上与GCC不兼容,比如GDI+。如果你想用 GDI+,您需要使用Microsoft编译器。

                                    Ross Ridge
  • 根据Windows SDK编译:


但可能他只是想键入“make”,这似乎也是一个很好的参考:完全没有必要这样做。为什么不需要指定include目录?g++如何知道包含文件的位置?例如,当我包含framegrabber SDK时,我的编译器会抱怨找不到crtDbg.h include文件。该头文件存在于C:\Program Files\Microsoft Platform SDK\Include\crt\中,但g++似乎对此一无所知。MinGW GCC从其自己的包含目录(包含其自己版本的windows头文件)中获取包含文件。如果需要指定“非标准”头,则可能需要使用include路径,但应确保它位于GCC默认路径之后。此外,如果你想编写可移植代码,你需要对文件名的大小写稍微小心一点——你永远不应该使用大小写混合。谢谢包含路径的优先顺序是什么?传递给编译器的“-I”是否会覆盖GCC默认路径?此外,如果您想要快乐的生活,请在目录名中没有空格的路径中安装任何额外的头和库。请记住,GCC是一个基于UNIX的工具链,UNIX用户几乎从不创建包含空格的文件名,因此这些工具尚未在此类名称上进行过良好测试。记不起优先级是什么-GCC手册可在上找到。