Установка Qt под под Linux/Wine для сборки бинарников для Windows

Иногда приходится заниматься разработкой приложений, которые должны работать как под Linux, так и под Win32. Основная платформа для меня Linux, следовательно встает вопрос, как как с минимальными затратами времени собирать и тестировать вариант программы для Windows.

Можно собирать и тестировать под VirtualBox, пробовал я это делать, но мне показалось это неудобным, долговато он запускается. Можно кроскомпилировать прямо из под Linux, при помощи mingw, но очень уж там много возни с настройкой среды кросскомпиляции.

В конце-концов я остановился на следующем варианте:

  • Сборка Linux варианта как обычно.
  • Сборка Windows варианта под Wine
  • Испытания Windows варианта сначало под Wine, потом под VirtualBox

Установка свежего Qt под Wine

Сначала устанавливаем Wine. Я работаю с Ubuntu. Соответственно, версии софта:

  • Линукс: Ubuntu 9.10
  • Пакет: wine1.2
  • Версия Wine: 1.1.31

Установка Wine:

  apt-get install wine1.2

Устанавливаем Qt под Wine. Выбираем самый простой путь. Идем на:

http://qt.nokia.com/downloads

Выбираем LGPL версию и скачиваем Qt SDK for Windows* (287 MB) У меня нормально работала версия 2009.05. Устанавливаем полученный софт:

  wine qt-sdk-win-opensource-2009.05.exe
Отвечаем на вопросы. Когда программа установки отработает, Qt установлено. Теперь нужно настроить пути в Wine. Запускаем:
  wine regedit.exe

Находим строковое значение HKEY_CURRENT_USER/Environment/Path и добавляем к нему путь к Qt и mingw. Строка пути должна получиться вроде такой:

  c:\windows;c:\windows\system;c:\Qt\2009.05\qt\bin;c:\Qt\2009.05\mingw\bin

Теперь мы готовы написать скрипты для компиляции под Wine

Скрипты для компиляции

Теперь пишем простенькие скриптики для построения файла проекта Qt, компиляции и директории с исходниками.

Скрипт 0_config.sh с конфигурационной информацией:

PRJ_NAME="project_name"

# ----- Wine section -----
WINE="wineconsole --backend=curses "

WINE_PRJ_FILE="wine_${PRJ_NAME}.pro"
WINE_MAKEFILE="wine_Makefile"
WINE_EXE_NAME="wine_$PRJ_NAME.exe"
export WINEPREFIX="/home/evgeny/.wine"

# ----- Linux section -----
LIN_PRJ_FILE="lin_${PRJ_NAME}.pro"
LIN_MAKEFILE="lin_Makefile"
LIN_EXE_NAME="lin_$PRJ_NAME.exe"

Скрипт 0_wine_build.sh построение проекта для wine:

#! /bin/bash

# Read config
source 0_config.sh

CMD1="qmake -project -o $WINE_PRJ_FILE "
CMD2="qmake -makefile -o $WINE_MAKEFILE $WINE_PRJ_FILE"

$WINE $CMD1
$WINE $CMD2

Скрипт 0_wine_make.sh компиляции для wine:

#! /bin/bash

# Read config
source 0_config.sh

CMD="mingw32-make -f $WINE_MAKEFILE.Release"

$WINE $CMD $1

Как видно для вайн запускается wineconsole и в ней уже выполняются команды компиляции.

Скрипты для Linux тривиальны, поэтому здесь я их не привожу.

Деплоймент для Win32

Берем свое приложение, exe файл скомпилированный для Win32 и пробуете запустить его под Windows. Оно жалуется на отсутствие dll. Находите эту DLL в директории wine и копируете в директорий, в котором запускаете свое приложение. И так до победы. У меня, например для простейшего приложения получился такой список DLL:

  • libgcc_s_dw2-1.dll
  • mingwm10.dll
  • QtCore4.dll
  • QtGui4.dll

Заключение

Надеюсь, кому-нибудь эта рассказка окажется полезной.

Опубликовано: September 15, 2010

Комментарии:


Комментировать:

Имя:

Комментарий: