Может ли 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?!)