?

Log in

No account? Create an account

Предыдущая бредятина | Следующая бредятина

Developing with Qt4 on Linux for Windows

Единственное предположение данного howto - у тебя стоит Gentoo. Это предположение заключается в использовании команды emerge и наличии пакета crossdev. Скорее всего, эти вещи легко заменяются аналогичными на дебианах/бубунтах и проч.
Так же моя хост-система собрана под x86-64, возможно, из-за этого конкретно у тебя что-то не будет работать. Любые добавления/исправления с радостью будут приняты.

1. Ставим линуксовую версию Qt4.

emerge qt
Можно пойти попить кофе или наконец погулять с девушкой — qt собирается долго.

2. Ставим виндовую версию Qt4 и MinGW.

Качаем mingw: http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=240780,
Qt: ftp://ftp.trolltech.com/qt/source/qt-win-opensource-4.3.3-mingw.exe (я использую версию 4.3.3, не факт, что на момент прочтения этого howto она будет еще актуальна).
wine qt-win-opensource-4.3.3-mingw.exe
Ставим MinGW — в ~/mingw, Qt в ~/qtwin.
Я не пробовал ставить разные виндовые и линуховые версии Qt, скорее всего, необходимо, чтобы они были одинаковые.

3. Компилируем toolchain.

emerge crossdev
crossdev -t i686-pc-mingw32 (под x86 может быть необходимым вместо этого использовать crossdev -t mingw32)
В зависимости от ACCEPT_KEYWORDS и от того, какую версию GCC/binutils/etc ты хочешь, может быть необходимым подредактировать /etc/portage/package.keywords (пакеты cross-i686-pc-mingw32/binutils и т.д.).
Можно выпить еще кофе. На моей машине (Core2Duo E6600@3.4) crossdev скрипел винтом минут 15-20.

4. Копируем библиотеки Qt/Win.

Копируем папки
~/qtwin/lib
~/qtwin/include
в
/usr/i686-pc-mingw32/Qt
Получатся
/usr/i686-pc-mingw32/Qt/lib
/usr/i686-pc-mingw32/Qt/include
соответственно.

5. Правим спеки.

Можно создать новые spec-файлы, можно править win32-g++. Я выбрал второй вариант. Открываем /usr/share/qt4/mkspecs/win32-g++/qmake.conf и делаем следующие замены:
QMAKE_CC = i686-pc-mingw32-gcc
QMAKE_CXX = i686-pc-mingw32-g++
QMAKE_INCDIR_QT = /usr/i686-pc-mingw32/Qt/include
QMAKE_LIBDIR_QT = /usr/i686-pc-mingw32/Qt/lib
QMAKE_LINK = i686-pc-mingw32-g++
QMAKE_COPY_DIR = cp -r
QMAKE_COPY = cp
QMAKE_DEL_FILE = rm
QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
QMAKE_UIC = $$[QT_INSTALL_BINS]/uic

Добавляем в район строчки 85-90 (блок } else {)такую:
QMAKE_DIR_SEP = /

6. Компилируем приложение.

qmake -spec win32-g++ -win32 (или qmake -spec yourname, если в шаге 4 ты решил переименовывать спеки).
make

7. Запускаем приложение.

Приложение требует .dll-файлы Qt в своей директории (QtCore4.dll, QtGui4.dll etc). Скопируем их из ~/qtwin/bin в директорию с приложением. Теперь - wine exename.exe, и все!

Comments

( 11 глупостей — Ляпнуть глупость )
gerr_alt
Jan. 2nd, 2008 08:06 pm (UTC)
Это охрененно просто для обычного пользователя с ограниченным временем... :-[
0xd34df00d
Jan. 2nd, 2008 08:15 pm (UTC)
А ты хотел...
gerr_alt
Jan. 2nd, 2008 08:17 pm (UTC)
Ну да... Была бы одна кнопочка с надписью "Сделать П*здато" (с)... )))
asp_gentoolinux
Aug. 28th, 2008 07:04 am (UTC)
Не знаешь, как такую же штуку сделать с CMake (а не qmake)?
0xd34df00d
Aug. 28th, 2008 07:41 am (UTC)
Пока еще нет. Впрочем, кажется у них в вики на оффсайте были инструкции на тему.
asp_gentoolinux
Aug. 28th, 2008 07:54 am (UTC)
Да, тут что-то есть: http://www.cmake.org/Wiki/CMake_Cross_Compiling
Но с этим еще разбираться нужно
sinitsins
Jun. 24th, 2009 03:31 am (UTC)
Здорово, что поиск привел меня в ЖЖ :-)
По теме вопрос: Зачем ставить виндузовый MinGW? Или Вы его ставите из исходников?
П.С.
У меня crossdev -t i686-mingw32 валится при сборке w32api -ругается на "повторное определение". Никто не в курсе, как лечить?
0xd34df00d
Jul. 10th, 2009 02:31 pm (UTC)
Из исходников.

К сожалению, не в курсе, я уже более года не сижу на gentoo.
ext_196135
Jun. 30th, 2009 08:58 am (UTC)
А зачем toolchain компилировать? Зачем он вообще нужен?
0xd34df00d
Jul. 10th, 2009 02:30 pm (UTC)
Тулчейн позволяет создавать executable'ы под целевую платформу. Его нужно компилировать, потому что он по умолчанию не скомпилирован (ну малому количеству людей нужно компилить из-под линуха под винду, да).
bnik
Mar. 7th, 2010 07:39 pm (UTC)
Приветствую =)

>>Приложение требует .dll-файлы Qt в своей директории (QtCore4.dll,
>>QtGui4.dll etc). Скопируем их из ~/qtwin/bin в директорию с приложением.
>>Теперь - wine exename.exe, и все!

Если после компиляции кидаешь программку на чужой комп с ХР, тоже будит требовать эти библиотеки.
Вопрос - есть ли функция "вшивания" библиотек в exe'шник?
Не интересовался этим вопросом?
( 11 глупостей — Ляпнуть глупость )