Если страсть как нужно че-нить скомпилить под венду, то прямой путь тукана - это ставить/загружать ее болезную, заливать в придачу еще дикую кучу программ аля "минимальный пакет разработчика", защищать несчастную от злого интернета и вирусов, и прочее, прочее, прочее. Нормальные герои, как известно, всегда идут в обход этих соврешенно не нужных проблем: MinGW - наш ответ Чемберлену. Можно продолжать себе сидеть под Linux и, спокойно попивая чаек, с успехом ваять программы для венды, тут же проверяя их под Wine.
Для начала нам понадобиться codegen среда - все тот же старый добрый gas/ld/gcc и g++:
// Убеждаемся, что в системе стоит последний gmp и mpfr
1. Компилим и ставим binutils:
- configure --prefix=/usr --target=i386-mingw32
- make && make install
2. mkdir /usr/i386-mingw32/include;
- tar xvfzp mingw-runtime* w32api-*;
- cp -a mingwrt-*/include/* /usr/i386-mingw32/include
- cp -a w32api-*/include/* /usr/i386-mingw32/include
3. ../gcc-4.4.2/configure --prefix=/usr --target=i386-mingw32 --disable-win32-registry --enable-languages=c
// ignore missing dllcrt2.o
- make -i && make -i install
4. w32api-*/configure --prefix=/usr/i386-mingw32 --host=i386-mingw32
- make && make install
5. mingwrt-*/configure --prefix=/usr/i386-mingw32 --host=i386-mingw32
- make -i CFLAGS=-I/usr/i386-mingw32/include
- make -i && make -i install
// now we have dllcrt2.o installed
6. cd gcc-build
- make && make install
7. cd mingwrt-build
- make && make install
8. cd gcc-build
../gcc-4.4.2/configure --prefix=/usr --target=i386-mingw32 --disable-win32-registry --enable-languages=c,c++
- make && make install
9. Проверяем на простом как конь примере :
// wintest.c
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
MessageBox (NULL, "Hello", "Hello Demo", MB_OK);
return (0);
}
// компилим
i386-mingw32-gcc wintest.c -o wintest.exe -mwindows
// пущаем
wine wintest.exe
И так, кое что уже есть. Конечно писать программы на голом winapi - это для людей знающих толк в извращениях, скучно и обычно никому не нужно. Неплохо бы одним движением руки, так сказать, а не месяц биться фэйсом об тейбл с аналогичным результатом. Вобщем надо бы определиться с GUI фреймворком, но об этом в следующей заметке ...
