ApplicationCreationManual — различия между версиями

Материал из Русский WINE
Перейти к: навигация, поиск
м (ВиталийЛипатов переименовал страницу WINE/ApplicationCreationManual в ApplicationCreationManual без оставления перенаправления)
 
(не показаны 2 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[Category:WINE]]
 
 
{{MovedFromWikiEterSoftRu|WINE/ApplicationCreationManual}}
 
{{MovedFromWikiEterSoftRu|WINE/ApplicationCreationManual}}
 
  
 
== Написание приложения под wine с использованием mingw. ==
 
== Написание приложения под wine с использованием mingw. ==
 
 
  
 
=== Постановка задачи ===
 
=== Постановка задачи ===
  
 
Собрать проект Visual Studio С++  под Wine с использованием компилятора mingw.
 
Собрать проект Visual Studio С++  под Wine с использованием компилятора mingw.
 
 
  
 
=== Инструменты ===
 
=== Инструменты ===
Строка 17: Строка 11:
 
Для сборки проекта в системе должны быть установлены следующие пакеты:
 
Для сборки проекта в системе должны быть установлены следующие пакеты:
  
1. wine
+
#wine
 
+
#mingw32-gcc-c++
2. mingw32-gcc-c++
+
#mingw32-binutils
 
+
3. mingw32-binutils
+
 
+
 
+
  
 
Дополнительно можно воспользоваться пакетом hd2u для преобразования DOS символов перевода строк.
 
Дополнительно можно воспользоваться пакетом hd2u для преобразования DOS символов перевода строк.
 
 
  
 
Названия пакетов даны для дистрибутива ALT Linux. В других дистрибутивах эти названия могут отличаться.
 
Названия пакетов даны для дистрибутива ALT Linux. В других дистрибутивах эти названия могут отличаться.
 
 
  
 
=== Реализация ===
 
=== Реализация ===
 
 
  
 
Для начала скачиваем проект на Visual Studio:
 
Для начала скачиваем проект на Visual Studio:
  
 
[http://www.codeproject.com/KB/directx/basicdd.aspx http://www.codeproject.com/KB/directx/basicdd.aspx]
 
[http://www.codeproject.com/KB/directx/basicdd.aspx http://www.codeproject.com/KB/directx/basicdd.aspx]
 
 
  
 
Этот же проект можно взять из каталога vs-source репозитория:
 
Этот же проект можно взять из каталога vs-source репозитория:
  
 
[http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git]
 
[http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git]
 
 
  
 
Из этого проекта нам понадобятся следующие файлы:
 
Из этого проекта нам понадобятся следующие файлы:
Строка 62: Строка 42:
  
 
bmp_bigcar_green.bmp</pre>
 
bmp_bigcar_green.bmp</pre>
 
 
  
 
Из файлов [http://wiki.etersoft.ru/BasicDD.cpp BasicDD.cpp] и cSurface.cpp удалим строчку:
 
Из файлов [http://wiki.etersoft.ru/BasicDD.cpp BasicDD.cpp] и cSurface.cpp удалим строчку:
  
 
<pre>#include "stdafx.h"</pre>
 
<pre>#include "stdafx.h"</pre>
 
 
  
 
Создадим [http://wiki.etersoft.ru/Makefile.mingw Makefile.mingw] такого содержания:
 
Создадим [http://wiki.etersoft.ru/Makefile.mingw Makefile.mingw] такого содержания:
Строка 127: Строка 103:
 
.rc.res.o:
 
.rc.res.o:
  
         $(WINDRES) $^ $@</pre>
+
         $(WINDRES) $^ $@
 
+
</pre>
 
+
  
 
Это универсальный makefile для проектов на C и C++, собираемых компилятором mingw.
 
Это универсальный makefile для проектов на C и C++, собираемых компилятором mingw.
 
 
  
 
Кроме этого, сделаем Makefile с конкретными целями сборки:
 
Кроме этого, сделаем Makefile с конкретными целями сборки:
Строка 178: Строка 151:
  
 
<pre>make</pre>
 
<pre>make</pre>
 
 
  
 
считайте что вам повезло.
 
считайте что вам повезло.
 
  
  
Строка 194: Строка 164:
  
 
make: *** [test.exe] Ошибка 1</pre>
 
make: *** [test.exe] Ошибка 1</pre>
 
 
  
 
Проблема связана с тем, что в libuuid.a отсутствует идентификатор (UIID) интерфейса IDirectDraw7.
 
Проблема связана с тем, что в libuuid.a отсутствует идентификатор (UIID) интерфейса IDirectDraw7.
 
 
  
 
Для решения этой проблемы необходимо собрать свою библиотеку libuuid.a, включающую необходимый UIID.
 
Для решения этой проблемы необходимо собрать свою библиотеку libuuid.a, включающую необходимый UIID.
 
  
  
Строка 208: Строка 173:
  
 
<pre>$ git clone http://source.winehq.org/git/wine.git</pre>
 
<pre>$ git clone http://source.winehq.org/git/wine.git</pre>
 
 
  
 
2. В файл dlls/uuid/uuid.c добавляем заголовочный файл с нужным UUID:
 
2. В файл dlls/uuid/uuid.c добавляем заголовочный файл с нужным UUID:
  
 
<pre>#include "ddraw.h"</pre>
 
<pre>#include "ddraw.h"</pre>
 
 
  
 
3. Собираем libuuid
 
3. Собираем libuuid
Строка 224: Строка 185:
  
 
libuuid.a</pre>
 
libuuid.a</pre>
 
 
  
 
Нам нужен libuuid.cross.a, т.к. он имеет формат статической библиотеки Windows и собирается с помощью mingw.
 
Нам нужен libuuid.cross.a, т.к. он имеет формат статической библиотеки Windows и собирается с помощью mingw.
  
 
Копируем этот файл в каталог примера.
 
Копируем этот файл в каталог примера.
 
 
  
 
Исправляем строчку с LDADD в Makefile:
 
Исправляем строчку с LDADD в Makefile:
  
 
<pre>LDADD+=-lgdi32 -luser32 -lddraw libuuid.cross.a</pre>
 
<pre>LDADD+=-lgdi32 -luser32 -lddraw libuuid.cross.a</pre>
 
 
  
 
После этого сборка должна работать.
 
После этого сборка должна работать.
 
 
  
 
=== Замечания ===
 
=== Замечания ===
 
+
# В новых версиях Wine каталог dlls/uuid может переехать в другое место
1. В новых версиях Wine каталог dlls/uuid может переехать в другое место
+
# На самом деле картинка bmp_bigcar_green.bmp для сборки не нужна.
 
+
 
+
 
+
2. На самом деле картинка bmp_bigcar_green.bmp для сборки не нужна.
+
  
 
Все собирается и работает без нее, т.к. картинка уже содержится в resource.rc. Но если возникнет необходимость изменить выводимое изображение, необходимо отредактировать этот bmp файл и добавить его в resource.rc.
 
Все собирается и работает без нее, т.к. картинка уже содержится в resource.rc. Но если возникнет необходимость изменить выводимое изображение, необходимо отредактировать этот bmp файл и добавить его в resource.rc.
 
 
  
 
=== Ссылки ===
 
=== Ссылки ===
 
+
*[http://freesource.info/wiki/RuslanHihin/gitusermanual Руководство по использованию git]
[http://freesource.info/wiki/RuslanHihin/gitusermanual http://freesource.info/wiki/RuslanHihin/gitusermanual] - руководство по использованию git
+
*[http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git Репозиторий готового проекта]
 
+
*[http://www.winehq.org Сайт разработчиков оригинального Wine]
[http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git http://git.etersoft.ru/people/shpigor/packages/ddraw-test.git] - репозиторий готового проекта
+
*[http://www.codeproject.com Хороший сайт с примерами кода на разных языках]
 
+
{{Wine}}
[http://www.winehq.org http://www.winehq.org] - сайт разработчиков оригинального Wine
+
[[Category:Разработка]]
 
+
[http://www.codeproject.com http://www.codeproject.com] - хороший сайт с примерами кода на разных языках
+

Текущая версия на 23:32, 8 декабря 2015

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