Естественно тема обсуждалась многими и во многих местах, но каждый из нас тратил время чтобы изучить новую для себя технологию, или вспомнить старое. Эту заметку я надумал тут оставить хотя бы для себя, чтобы без лишних мучений заново настроить свой Qt если все заново придется настраивать если конфиги растеряю.
Уже больше года занимаясь программированием на Qt, я давно планировал купить Windows, дабы компилировать на нем лицензионные программы под эту платформу. Windows был бы нужен только для компиляции и ни для чего больше. Все что меня интересует я давно нашел в линуксе.
Краем уха слышал что лазарус поддерживает кросскомпиляцию, но не удивился, при их подходе все пихать в бинарник - это вполне естественно, подумал я. Но в один прекрасный день я открыл nigma.ru и вбил туда "кросскомпиляция Qt". С этого и началась вся история...
Во-первых, я использую qt-sdk, да так, чтобы в нем никаких либов от kde не подгружалось без спроса, ибо либы эти - gpl, а это для меня не желательно. Лежит SDK в папке: /opt/qtsdk-2009.03 . Будем считать что ваш qt-sdk лежит в той же папке. Тогда у вас должна быть и такая папка: /opt/qtsdk-2009.03/qt/mkspecs/win32-g++. Там лежат спеки для компиляции в mingw. Для настройки спека на кросскомпиляцию достаточно поправить файл qmake.conf, лежащий в этой папке, для этого достаточно изменить следующие строки:
QMAKE_CXX = i586-mingw32msvc-g++
QMAKE_INCDIR = /usr/i586-mingw32msvc/include/
QMAKE_INCDIR_QT = /wine_c/Qt/2009.03/qt/include/
QMAKE_LIBDIR_QT = /wine_c/Qt/2009.03/qt/lib/
QMAKE_LINK = i586-mingw32msvc-g++
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import \
-Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_DIR_SEP = /
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm -f
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rm -rf
QMAKE_RC = i586-mingw32msvc-windres
QMAKE_ZIP = zip -r -9
QMAKE_STRIP = i586-mingw32msvc-strip
Но это конечно же не следует делать бездумно. Бинарники i586-mingw32msvc-strip, i586-mingw32msvc-g++ и т.д. должны быть установлены. Для этого необходимо открыть пакетный менеджер и поставить пакеты: mingw32, mingw32-binutils, mingw32-runtime.
Папки: /wine_c/Qt/2009.03/qt/include/ и /wine_c/Qt/2009.03/qt/lib/ - это папки инклудов и библиотек windows-версии Qt, которые могут быть установлены посредством установки windows версии qt-sdk через wine, при этом в ыше предполагалось, что /wine_c - это ссылка на папку ~/.wine/dosdevices/c\:, то есть на диск c.
Итак, если все сделано правильно, то для компиляции windows-приложения достаточно в папке с проектным файлом выполнить:
/opt//qtsdk-2009.03/qt/bin/qmake -spec win32-g++
make
Все это довольно просто, хотя этот мануал и не позволит вам вслепую копировать приведенный алгоритм. Разве что вы поставите qt в папку /opt/qtsdk-2009.03/ и сделаете ссылку /wine_c, тогда прямое выполнения алгоритма задачу решит, но не иначе.
Это лишь первая заметка о кросскомпиляции, в последующих будет рассмотрено:
Комментарии (3)
Спасибо за полезную статью! Жаль такой не было, когда я задавался этим вопросом. Я тогда достойных русских манов по кросскомпиляции не нашел, и у меня сложилось впечатление, что таким гемором никто не занимается, и все компилят либо на винде, либо под вайном (как и я). Теперь гугл будет знать куда слать )
Очень хорошая и умная статья! Сам занимаюсь кросс-компиляцией, только немного в другой области, поэтому тема для меня очень интересная! Жду еще))
Спасибо. Постараюсь не тянуть с продолжением.
Отправить комментарий