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 f开发者_如何学编程iles from the Windows SDK.
Do I need to learn Visual Studio or is there another way?
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.
According to the discussions from the MinGW-users mailing list, you might encounter compatibility problems with the Windows SDK, and you may have to fix those problems yourself.
Georgi Petrov [Dec 27, 2010; 8:33am]:
Hello,
I'm trying to develop a EVR (Vista/7 specific video presentation API) renderer for MPlayer on MSYS/MinGW. The problem is that I have Windows SDK v7.1 and I need evr.h from it. If I try to copy it to MinGW's include directory as well as the 12 header files it includes, the compilation is close to impossible. I have a TON of errors just by including evr.h, nothing else. I investigated and found that I can't use the Windows SDK header files directly with MinGW, because it ships with its own header files, which are sometimes very, very different. The problem is that Media Foundation/Enhanced Video Renderer header files are not part of MinGW's header files.
What should I do?
Windows SDK header files question:
http://mingw-users.1079350.n2.nabble.com/Windows-SDK-header-files-question-td5870336.html
Ross Ridge [Oct 10, 2010; 10:16pm]:
For the most part the Windows SDK headers aren't incompatible with GCC. If there one particular header file you need that doesn't exist in win32api heapers or is missing something you need, then you can try just using that one header with from the Windows SDK and use win32api for the rest.
It's also possible to only use Windows SDK headers, and avoid using the win32api headers entirely, but you need to fix a number of problems in key header files. I used to just modify the headers, but the Windows SDK has actually gotten a bit more compatible and now I use wrappers to fix the problems.
There are some header files and libraries that are pretty much fundementally incompatible with GCC, like GDI+. If you want to use GDI+, you'll need to use a Microsoft compiler.
Ross Ridge
compiling against Windows SDK:
http://mingw-users.1079350.n2.nabble.com/compiling-against-Windows-SDK-td5609389.html
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 ?!)
Try using the latest version of MSYS2 UCRT64 with MingW64. I'm using it on Windows 11.
Use 'pacman' to install 'mingw-w64-x86_64-gcc'. Try re-installing it too to insure you have the WIN32 SDK which is included in this windows-based package:
$ pacman -S mingw-w64-x86_64-gcc
warning: mingw-w64-x86_64-gcc-12.2.0-6 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...
Packages (1) mingw-w64-x86_64-gcc-12.2.0-6
Total Installed Size: 154.48 MiB
Net Upgrade Size: 0.00 MiB
:: Proceed with installation? [Y/n] Y
(1/1) checking keys in keyring [###############################] 100%
(1/1) checking package integrity [###############################] 100%
(1/1) loading package files [###############################] 100%
(1/1) checking for file conflicts [###############################] 100%
(1/1) checking available disk space [###############################] 100%
:: Processing package changes...
(1/1) reinstalling mingw-w64-x86_64-gcc [###############################] 100%
I discovered the windows.h is located in '/ucrt64/include' within the shell session and 'C:\Msys64\ucrt64\include' outside the shell:
$ find . -name windows.h
./mingw64/include/windows.h
./ucrt64/include/windows.h
Here's a link to an article from Microsoft which shows how to troubleshoot setting up gcc to work with building windows applications:
https://code.visualstudio.com/docs/cpp/config-mingw
You can add the directories to your build using the '-I' parameter on 'make' or 'gcc':
make -I /ucrt64/include
精彩评论