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

Могут ли 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 (написанные от руки). Для новой функции мне нужно взаимодействовать с frame grabber , который имеет SDK, который был разработан для Visual Studio . SDK для framegrabber зависит от заголовочных файлов из Windows SDK.

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

Ответы [ 3 ]

13 голосов
/ 07 января 2010

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

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

g++ main.cpp

абсолютно без проблем.

Подробнее: Чтобы вы знали, что делает флаг -mwindows , в документации GCC говорится:

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

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

4 голосов
/ 28 июля 2012

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


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

Привет,

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

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


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

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

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

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

                                    Ross Ridge
0 голосов
/ 07 января 2010

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

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

РЕДАКТИРОВАТЬ: мой GCC компилирует ваш скрипт без проблем (и без этих определений), а также Я использую MCCW 4.40 (альфа?!)

...