g ++ / minGW可以和Windows SDK一起玩吗? Visual Studio是唯一的select吗?

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

具体来说,为什么g ++不能编译:

#include <stdio.h> #include <windows.h> int main(void) { printf("!!!Hello World!!!"); return EXIT_SUCCESS; } 

我试过编译运行:

 g++ -c -Wall Test.cpp -IC:/Program\ Files/Microsoft\ Platform\ SDK/Include/ 

我从一开始就遇到了一连串的编译错误

 winnt.h:666:2: #error Must define a target architecture. 

我已经安装了Windows Server 2003 SP1平台SDK

背景

我正在研究一个大型的实时image processing软件项目,到目前为止,已经使用了g ++,minGW和gnu make文件(手写)。 对于一个新的function,我需要与一个图像采集卡进行交互,该图像采集卡具有一个为Visual Studiodevise的SDK 。 framegrabber SDK依赖于Windows SDK中的头文件。

我需要学习Visual Studio还是有另一种方法?

我使用MinGW每天编译Windows程序,没有任何问题。 安装时一定有问题 – 试试Twilight Dragon Media的版本。

编辑:只需重新读你的文章 – 你不需要指定包括目录,你可能不应该这样做。 另外,你可能(或者可能不)需要稍微神秘的mwindows标志。 我使用MinGW(TDM build)g ++ 4.4.1编译你的程序,命令行如下:

 g++ main.cpp 

绝对没有问题。

更多信息:只要你知道-mwindows标志是什么,GCC文档就会说:

此选项可用于Cygwin和MinGW目标。它指定要通过指示链接器适当地设置PE标题子系统类型来生成GUI应用程序。

就个人而言,我从来没有发现它是必要的,但是我的Windows应用程序都是命令行工具或服务器。

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


Georgi Petrov [2010年12月27日; 8:33]:

你好,

我正在尝试为MSYS / MinGW上的MPlayer开发一个EVR(Vista / 7特定视频演示API)渲染器。 问题是我有Windows SDK v7.1,我需要从它evr.h。 如果我试图将它复制到MinGW的include目录以及它包含的12个头文件,编译几乎是不可能的。 我只有通过包含evr.h而没有其他的错误。 我调查了一下,发现我不能直接使用MinGW的Windows SDK头文件,因为它附带了自己的头文件,有时候这些头文件有很大不同。 问题是Media Foundation / Enhanced Video Renderer头文件不是MinGW头文件的一部分。

我该怎么办?


罗斯里奇[2010年10月10日; 下午10点16]:

Windows SDK头文件大部分与GCC不兼容。 如果你需要的一个特定的头文件在win32api heapers中不存在,或者缺少你需要的东西,那么你可以尝试在Windows SDK中使用这个头文件,其余的使用win32api。

也可以只使用Windows SDK头文件,并完全避免使用win32api头文件,但是您需要修复关键头文件中的一些问题。 我以前只是修改头文件,但是Windows SDK实际上已经变得更加兼容了,现在我使用包装来解决问题。

有一些头文件和库是非常fundementally与GCC不兼容,如GDI +。 如果您想使用GDI +,则需要使用Microsoft编译器。

  Ross Ridge 

尝试添加这些定义,然后再包含这些窗口标题

 #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 

编辑:我的gcc编译你的脚本没有问题(也没有这些定义)。 我正在使用mingw的gcc 4.40(alpha?!)

安迪,你是否想得到这个问题的解决方案? 我实际上在与Windows SDK握手时使用MinGW / MSYS运行相同的问题。

我必须开发一个可以在Linux操作系统上正常工作的stacktrace walk机制的win32平台迁移。

首先,我试图使用win32 CaptureStackBackTrace API机制来实现stackwalk。 但是这种方法没有被集成到mingw的真正的winbase头中…所以我决定尝试使用dbgheader机制…但是我又失败了,因为dbghelp头文件和库不是MinGW安装的一部分…

现在我尝试使用MinGW / MSYS握手与实际的Widnows SDK …

我会很感激任何信息。 最好的问候,克里斯