Can g++ / minGW play nice with the Windows SDK? Is Visual Studio the only option?

Viewed 19312

Can g++ and minGW on Windows XP use the Windows SDK?

Specifically, why does g++ fail to compile:

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

int main(void) {
 printf("!!!Hello World!!!");
 return EXIT_SUCCESS;
}

I have tried compiling by by running:

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

I get a litany of compile errors beginning with

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

I have installed the Windows Server 2003 SP1 Platform SDK

Background

I am working on a large real-time image processing software project that up until now has used g++, minGW and gnu make files (written by hand). For a new feature, I need to interface with a frame grabber that has an SDK which was designed for Visual Studio. The framegrabber SDK depends on header files from the Windows SDK.

Do I need to learn Visual Studio or is there another way?

3 Answers

I use MinGW to compile Windows programs every day, with zero problems. There must be something wrong with your installation - try the version at Twilight Dragon Media.

Edit: Just re-read your post - you do not need to specify the include directory as you are doing, and probably should not do so. Also, you may (or may not) need the slightly mysterious -mwindows flag. I just compiled your program using MinGW (TDM build) g++ 4.4.1, with the command line:

g++ main.cpp

with absolutely no problems.

More Info: Just so you know what the -mwindows flag does, the GCC docs say:

This option is available for Cygwin and MinGW targets.It specifes that a GUI application is to be generated by instructing the linker to set the PE header subsystem type appropriately.

Personally, I've never found it necessary, but then my Windows apps are all command line tools or servers.

try adding these defines before you include those windows headers

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

EDIT: my gcc compiles your script without problems (and without these defines) aswell. I am using mingw's gcc 4.40 (alpha ?!)

Related