FreeSource : WINE/ApplicationCreationManual

Написание приложения под wine с использованием mingw.

Постановка задачи

Собрать проект Visual Studio С++ под Wine с использованием компилятора mingw.

Инструменты

Для сборки проекта в системе должны быть установлены следующие пакеты:
1. wine
2. mingw32-gcc-c++
3. mingw32-binutils

Дополнительно можно воспользоваться пакетом hd2u для преобразования DOS символов перевода строк.

Названия пакетов даны для дистрибутива ALT Linux. В других дистрибутивах эти названия могут отличаться.

Реализация


Для начала скачиваем проект на Visual Studio:
http://www.codeproject.com/KB/directx/basicdd.aspx

Этот же проект можно взять из каталога vs-source репозитория:
http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git

Из этого проекта нам понадобятся следующие файлы:


Из файлов Basic DD.cpp и cSurface.cpp удалим строчку:


Создадим Makefile.mingw такого содержания:


Это универсальный makefile для проектов на C и C++, собираемых компилятором mingw.

Кроме этого, сделаем Makefile с конкретными целями сборки:


Если все это у вас соберется после команды


считайте что вам повезло.

При сборке с версией 1.3.6 оригинального Wine при линковке возникала следующая ошибка:


Проблема связана с тем, что в libuuid.a отсутствует идентификатор (UIID) интерфейса IDirectDraw7.

Для решения этой проблемы необходимо собрать свою библиотеку libuuid.a, включающую необходимый UIID.

1. Клонируем репозиторий оригинального wine


2. В файл dlls/uuid/uuid.c добавляем заголовочный файл с нужным UUID:


3. Собираем libuuid
После сборки получим 2 файла:


Нам нужен libuuid.cross.a, т.к. он имеет формат статической библиотеки Windows и собирается с помощью mingw.
Копируем этот файл в каталог примера.

Исправляем строчку с LDADD в Makefile:


После этого сборка должна работать.

Замечания

1. В новых версиях Wine каталог dlls/uuid может переехать в другое место

2. На самом деле картинка bmp_bigcar_green.bmp для сборки не нужна.
Все собирается и работает без нее, т.к. картинка уже содержится в resource.rc. Но если возникнет необходимость изменить выводимое изображение, необходимо отредактировать этот bmp файл и добавить его в resource.rc.

Ссылки

http://freesource.info/wiki/RuslanHihin/gitusermanual – руководство по использованию git
http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git – репозиторий готового проекта
http://www.winehq.org – сайт разработчиков оригинального Wine
http://www.codeproject.com – хороший сайт с примерами кода на разных языках