ApplicationCreationManual

Материал из Русский WINE
Перейти к: навигация, поиск
Wackowiki-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была автоматически перемещена с old.wiki.etersoft.ru.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Написание приложения под 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

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

BasicDD.cpp

cSurface.cpp

cSurface.h 

resource.h

resource.rc

bmp_bigcar_green.bmp

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

#include "stdafx.h"

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

MINGW=i586-pc-mingw32

MINGWLIB=/usr/$(MINGW)/sys-root/mingw/lib

CC=$(MINGW)-gcc

LD=$(MINGW)-ld

CXX=$(MINGW)-g++

STRIP=$(MINGW)-strip

WINDRES=$(MINGW)-windres -v

RANLIB=$(MINGW)-ranlib

AR=$(MINGW)-ar



# TODO: uncomment me for release

RELFLAGS=-D_FORTIFY_SOURCE=2 -O2

#RELFLAGS=



CFLAGS=-Wall -Wno-pointer-sign $(RELFLAGS)

CXXFLAGS=-Wall $(RELFLAGS)



LDADD=-static-libgcc

.SUFFIXES: .rc .res .res.o



%.o: %.c

        $(CC) $(CFLAGS) $(ONLYCFLAGS) -c $< -o $@



%.o: %.cpp

        $(CXX) $(CXXFLAGS) -c $< -o $@



.rc.res.o:

        $(WINDRES) $^ $@

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

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

include Makefile.mingw



CXXFLAGS+=-Wall -I/usr/include/wine/windows

LDADD+=-lgdi32 -luser32 -lddraw /usr/lib/wine/libuuid.a



OBJECTS=BasicDD.o cSurface.o

RES=resource.rc



all: test.exe



test.exe: $(OBJECTS) $(RES).res.o

        $(CXX) $^ -o $@ $(LDADD)



$(RES).res.o: $(RES)

        $(WINDRES) $^ $@



clean:

        rm -f $(OBJECTS) $(RES).res.o test.exe


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

make

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


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

i586-pc-mingw32-g++ BasicDD.o cSurface.o resource.rc.res.o -o test.exe -static-libgcc -lgdi32 -luser32 -lddraw

BasicDD.o:BasicDD.cpp:(.text+0xa7): undefined reference to `_IID_IDirectDraw7'

collect2: ld returned 1 exit status

make: *** [test.exe] Ошибка 1

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

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


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

$ git clone http://source.winehq.org/git/wine.git

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

#include "ddraw.h"

3. Собираем libuuid

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

libuuid.cross.a

libuuid.a

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

Копируем этот файл в каталог примера.

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

LDADD+=-lgdi32 -luser32 -lddraw libuuid.cross.a

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

Замечания

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

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

Ссылки

Wine
Search.png
Программы работающие в WineСкачатьШкольный Wine
WINE@Etersoft Общие сведенияУстановка на 64-битные ОСОсобенности разработкиПатчи для WINE@EtersoftАдминистративная установкаДополнительные компонентыКак получить WINE@Etersoft?Лицензия на документациюГлоссарийИспользование аппаратных ключей защиты в LinuxДополнительная информация • [ Совместная работа | по CIFSпо NFS ] • Изменение системных ограниченийРегистрация продуктаПошаговая инструкция по установке rpm-пакетовОбращение в службу поддержкиТерминальные решенияУстановка WINE@EtersoftПодписка на обновленияНастройка WINE@EtersoftРазработчикуEnterpriseЧто такое WINE@Etersoft SQLВозможностиСреда для запуска приложений WindowsИспользование WINE@EtersoftFAQ по использованию WINE@EtersoftОсновные командыWINE@Etersoft/LocalЧто такое WINE@Etersoft Local
Программы Запуск БЭСТ 4+Запуск Консультант+ (сетевой версии)ГарантF1Инфо-Бухгалтер 8.xНалогоплательщик ЮЛ
1C Отличия от обычного WineМестоположение базы 1С1C: Предприятие 7.7 в WINEНастройка 1С 7.7 для работы с SQL-серверомУстановка 1С: Предприятия 8.1Установка 1С: Предприятия 8.1 в трёхзвенном режиме
Пользователю
Помощь Использование WinecfgИспользование RegeditПубличный префиксНесколько версийКлючи regedit
Легальность DCOM95IE5DCOMMSXML
Утилиты для работы с Wine WinetricksWineToolsQ4WinePlayOnLinuxIEs4LinuxWine-DoorsSwineWine LauncherLutris
Разработчику
Компоненты WindowsЗапрет отключения защиты программыУправление обработчиком исключенийStraceNTИзмерение скорости функций WinAPIGLУстройство чтения смарт-картПрофилированиеТесты для проверки интерфейсовНаписание тестов в системе WineАутентификация в домене ADРепозиторииПрименение Git-патчей
Помощь Создание патчейНаписание приложения под wineОтправка патчейСборка eterhackСборка wine-public
Отладка Способы отладкиWINEDEBUGWinedbg
Разработка WINE
1CODBCWinHelpКомпасМетодикаТестирование доступаЦветаФайловый диалогТестированиеЛитератураИзображенияWin32ШрифтыФайловые блокировкиСсылкиКлючи защитыRPMWineGeckoListViewУпаковка Wine
Производителю
Родственные проекты
LUKReactOSARWINSSCrossOverKernelEx
Прочее
PageSetupDlgFreeBSDWwr