Может ли g++/minGW играть хорошо с Windows SDK? Является ли Visual Studio единственным вариантом?

Может ли g++ и minGW в Windows XP использовать 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 Platform SDK

Фон

Я работаю над крупным программным обеспечением для обработки изображений в реальном времени, которое до сих пор использовало файлы g++, minGW и gnu make (написанные вручную). Для новой функции мне нужно связать с фрейм-граббером, который имеет SDK, который был разработан для Visual Studio. SDK Framegrabber зависит от файлов заголовков из SDK Windows.

Нужно ли мне изучать Visual Studio или есть другой способ?

Ответы

Ответ 1

Я использую MinGW для компиляции программ Windows каждый день с нулевыми проблемами. В вашей установке должно быть что-то не так - попробуйте версию Twilight Dragon Media.

Изменить: Просто перечитайте сообщение - вам не нужно указывать каталог include, как вы делаете, и, вероятно, не следует этого делать. Кроме того, вам может (или не обязательно) понадобиться слегка таинственный флаг -mwindows. Я просто скомпилировал вашу программу, используя MinGW (сборка TDM) g++ 4.4.1, с командной строкой:

g++ main.cpp

без проблем.

Дополнительная информация: Только чтобы вы знали, что делает флаг -mwindows, в документах GCC говорится:

Эта опция доступна для Cygwin и MinGW target.It указывает, что GUI приложение должно быть создано инструктаж компоновщика установить Подсистема заголовка PE надлежащим образом.

Лично я никогда не считал это необходимым, но тогда мои приложения для Windows - все инструменты командной строки или серверы.

Ответ 2

Согласно обсуждениям из списка рассылки MinGW-users, вы можете столкнуться с проблемами совместимости с Windows SDK, и вам, возможно, придется самостоятельно решить эти проблемы.


Георгий Петров [27 декабря 2010; 8:33 AM]:

Здравствуйте,

Я пытаюсь разработать EVR (API для видеопрезентации Vista/7) рендеринга для MPlayer на MSYS/MinGW. Проблема в том, что у меня есть Windows SDK v7.1, и мне нужно evr.h от него. Если я попытаюсь скопировать его в MinGW включая каталог, а также 12 файлов заголовков, которые он включает, компиляция практически невозможна. У меня есть TON ошибок, просто включая evr.h, больше ничего. Я исследовал и обнаружил, что не могу используйте файлы заголовков Windows SDK непосредственно с MinGW, потому что он отправляет с его собственными файлами заголовков, которые иногда очень и очень разные.Проблема в том, что заголовок Media Foundation/Enhanced Video Renderer файлы не являются частью файлов заголовков MinGW.

Что мне делать?


Росс Ридж [10 октября 2010; 10:16 PM]:

По большей части заголовки Windows SDK несовместимы с GCC. Если вам нужен один файл заголовка, который не существует в win32api heapers или отсутствует то, что вам нужно, тогда вы можете попробуйте использовать этот один заголовок с помощью SDK Windows и используйте win32api для остальных.

Также возможно использовать только заголовки Windows SDK и избегать использования заголовки win32api полностью, но вам нужно исправить ряд проблемы в файлах заголовков ключей. Я просто модифицировал заголовки, но Windows SDK фактически стал немного более совместимым, и теперь я используйте обертки для устранения проблем.

Есть несколько файлов заголовков и библиотек, которые в значительной степени финансово несовместимый с GCC, например GDI+. Если вы хотите использовать GDI +, вам нужно будет использовать компилятор Microsoft.

                                    Ross Ridge

Ответ 3

попробуйте добавить эти определения, прежде чем включать эти заголовки окон

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

EDIT: мой gcc компилирует ваш script без проблем (и без этих ограничений). Я использую mingw gcc 4.40 (alpha?!)