LINUX.ORG.RU

mingw + qt4 + linux + «native windows binary»


0

0

возник вопрос сборки 32-ух разрядных windows-приложений под линукс (64-ох битная). winelib отмел сразу, ибо на winapi не практиковал, а изучать руководства настроения нет. выбор пал на связке mingw + qt4. не без грабель, но в итоге все заработало. на скрине приложение из первой главы тюториала по qt. исходники никоем образом взависимости от оси не менялись. для генерации необходимых make-файлов использовалось `qmake` (для нативного приложения) и `qmake -spec win32-g++` (для windows-приложения)

сверху вниз: 1. qt4 linux - нативный 2. qt4 windows собранный под линуксом, запущенный через wine 3. как выглядит предыдущий бинарь под мастдаем

ps возникло лишь два вопроса, которые пока не решил. при генерации makefile'а под мастдай, описанным выше путем по умолчанию идут след. опции -o debug/<бла-бла-бла> (т.е. пишет исполняемый файл не в корень как обычно, а в папку debug) и пытается подцепить библиотеки -lQtCore_debug и -lQtGui_debug вместо -lQtCore и -lQtGui (хотя насчет последнего, я кажется знаю в чем дело, но еще не проверял)

pps если интересна более-менее подробная инструкция как все делал спрашивайте - запостю

>>> Просмотр (800x600, 69 Kb)

★★

Проверено: Shaman007 ()

Хм... такой вопрос... А что-нить более юзабельное, нежели "превед! медвед!", таким образом собирается? ;) А то знаю я... кросплатформенные эти ваши сборки... %))

Cy6erBr4in ★★★
()

да, мне интересно. да и другим людям тоже. так что если напишешь мануал - скажем спасибо :)

marx
()

Запости, pls инструкцию.

Ian ★★
()

закинь плз свои "мысли" по сборке на mingw+qt4. уже третюю неделю бьюсь головой апстенку. :-( тоже упёрся в эти долбанные либы, ибо дабы запустить прогу на другой машине - требует либу от mingw, ну и qt'шный набор. эта ж что, с прогой постоянно и либы носить?? и ещё упёрся в то, что проги хотя и собираются, но потом - нихера не запускаются, вываливаются маты, мол "ошибка, отправить отчёт мелкософту?" винда хр, запущенная под qemu, без акселератора kqemu.

anonymous
()
Ответ на: комментарий от anonymous

>закинь плз свои "мысли" по сборке на mingw+qt4. уже третюю неделю бьюсь головой апстенку. :-( тоже упёрся в эти долбанные либы, ибо дабы запустить прогу на другой машине - требует либу от mingw, ну и qt'шный набор.

сейчас у меня таж проблема. выхода тут два - либо носить dll-ки с прогой, либо собирать прогу со статической линковкой (вот с этим сейчас и разбираюс)

>и ещё упёрся в то, что проги хотя и собираются, но потом - нихера не запускаются, вываливаются маты, мол "ошибка, отправить отчёт мелкософту?" винда хр, запущенная под qemu, без акселератора kqemu.

по этому поводу, к сожалению, сказать ничего не могу.

зы инструкцию по сборке пишу, ждите. запостю сюда же.

ale ★★
() автор топика
Ответ на: комментарий от anonymous

> эта ж что, с прогой постоянно и либы носить??

Да. Можно конечно статически слинковать, но выигрыша практически никакого нет.

Насчёт кроссплатформенности, для переноса своих программ я не делал вообще ничего, просто перекомпилировал. Конечно мои программы не намного сложнее той, которая на скриншоте, в последней около тысячи строк, но проблем переносимости не было вообще.

Хотя были очень странные проблемы под 2000-й виндой - моя программа активно использует OpenGL, под XP работала без проблем, а под 2000-й примерно на половине тестируемых машин вылетала с ошибкой. Времени разбираться не было, но факт есть факт.

Кто-то спрашивал насчет debug-версий, насколько я понимаю, достаточно в .pro файле написать CONFIG += release

anonymous
()
Ответ на: комментарий от anonymous

>Кто-то спрашивал насчет debug-версий, насколько я понимаю, достаточно в .pro файле написать CONFIG += release

это я спрашивал, я разобрался. помне так лучше в файл .pro записать CONFIG -= release debug, тогда бинарник в корень упадет.

>Да. Можно конечно статически слинковать, но выигрыша практически никакого нет.

выигрыш есть - производительность чуть повыше (покрайней мере в теории), и библиотеки не надо тоскать. насчет статической линковки, никак не могу победить последнюю зависимость от mingw runtime библиотеки - если есть идеи сообщите.

ale ★★
() автор топика

Инструкция

вначале небольшая прелюдия об опытах под виндой: попытки слинковать бинарь исключительно статически - провалились, споткнулся о mingw runtime, но добился того, что для программы qt-библиотеки не требовались. в итоге с отладочной информацией бинарь разрося до 42Mb!!! из сопоставления этих фактов, для себя решил - буду таскать либы =) и еще я использовал версию qt 4.1.0 (для версии 4.1.1 я думаю ничего принципиально менять не надо, но если не заработает попробуйте "откатиться")

итак, для запуска всей этой красоты нам потребуется: 0. мастдай (у меня был xp) дабы скомпилить Qt 4 1. виндовый mingw (дабы скомпилить qt) 2. qt4 под винду (который open-source) 3. linux'овый mingw (дабы иметь возможность компилить код под мастдай) 4. qt4 под linux (собственно он и будет контролировать, что и как компилить) 5. wine чтобы наш бинарь протестить

итак по порядку: 1. виндовый mingw. забирать отсюда http://prdownloads.sourceforge.net/mingw/MinGW-5.0.2.exe?download запускаем устанавливаем, выходим.

добавляем переменные среды

добавляем в системную переменную path пути через точку с запятой "%QTDIR%/bin;c:/mingw/bin" создаем 2 переменные среды пользователя QTDIR со значением "C:\Qt\4.1.0" (или куда вы хотите qt ставить) и QMAKESPEC - "win32-g++"

у этого же проекта (mingw) есть комплект утилит под названием msys, о его необходимости для компиляции qt не знаю, ибо он у меня уже был установлен - если какая-то прога не будет найдена во время компиляции попробуйте установить msys и допишите путь к бинарям в path. если он установлен и его бинари находится в переменной path - временно переместите sh.exe из каталога

2. qt4 под винду (который open-source) забирать отсюда: http://www.trolltech.com/download/qt/windows.html я брал файл qt-win-opensource-src-4.1.1.zip, насчет файла qt-win-opensource-4.1.1-mingw.exe не знаю, но предположу, что это уже собранный бинарь.

копируем и распаковываем архив. из архива копируем каталог mkspecs туда, куда будем ставить (значение переменной qtdir) затем через cmd.exe заходим в каталог и configure.exe -prefix <туда куда хотим ставить, например С:\qt\4.1.0> -shared -fast заходим в директорию src (незачем лишнее компилять, и так долго будет) затем 'mingw32-make' и 'mingw32-make install' (команда 'make' не подойдет - не распознает бэксплеши в путях)

все Qt под винду работает, остаеться лишь закинуть dll-ки из каталога С:\qt\4.1.0\lib в каталог C:\windows\system32

3. linux'овый mingw как собрать и что качать можно почитать тут http://www.mingw.org/MinGWiki/index.php/build%20a%20Win32%20x-compiler%20for%... качаете, редактируете скрипт, запускаете скрипт - он автоматом все собирает и устанавливает. на странице указанной выше есть два скрипта первый подсвечен как "this shell-Script" и второй чуть ниже "BuildMingwCross". так вот в первом случае советую установить переменную do_clean=0 и потереть все что не нужно после установки. в противном случае при возникновении каких-либо ошибок компиляции пакет просто удаляется и никаких намеков на причину ошибки (так было у меня - не собрался g++, но потер каталог от куда билдил =) ), а уж при совпадении некоторых переменных, таких как "BUILD_ROOT" и "PACKAGE_DIR" так вообще потрет все те файлы, что вы скачали (к сожалению и такое у меня тоже было =) ) относительно второго скрипта никаких нареканий нет.

еще хотелось бы добавить, чтоб системные файлы были в порядке (мало-ли какой хедер куда перезапишется), советую выбрать префикс отличный от /usr,/usr/local, например /opt/mingw, после чего добавить /opt/mingw/bin в path 4. qt4 под linux собственно он нужен чтоб компилить и под винду и под линукс, как ставить его - описывать не буду. Единственное что, если хотите статические либы - укажите флаг -static во время ./configure (но если вы собираетесь собирать виндовые бинари с поддержкой dll - не собирайте с этим флагом)

главное, что понадобиться после установки - это спек-файл qmake.conf обычно он лежит в $QTDIR/mkspecs/win32-g++, какие его опции нужно отредактировать можно прочитать здесь: http://silmor.de/29 формат файла оч. прост, так что вопросов быть не должно. единственное что, следует обратить внимание на переменные QMAKE_INCDIR (указывает на хедеры mingw) QMAKE_INCDIR_QT (заголовочные файлы qt, собранного под виндой) QMAKE_LIBDIR_QT (каталог с dll-ками qt) я скопировал хедеры и либы в каталог /opt/mingw и указал названия каталогов в спеке

5. wine чтобы наш бинарь протестить наш бинарь потребует библиотеки. копируем dll-ки из QMAKE_LIBDIR_QT в каталог <wine drive c>windows\system32 или копируем в директорию с бинарником, запускаем, фан-фары, салют, все улыбаются, задание выполнено успешно...

как все это дело использовать написанно в самом первом посте. если что-то не компилиться, или компилиться не так смотреть в сторону спека и файла-проекта (.pro)

ps при статической сборке qt под винду по умолчанию (с примерами и прочим), директория разрастаеться более 6Гб - будьте внимательны!

ale ★★
() автор топика
Ответ на: комментарий от HAW

>ale, на qtlib.ru запостил бы

такая мысль пробегала, но времени к сожалению мало, если ктонить мой сабж отшлифует и опубликует - я буду только рад =)

ale ★★
() автор топика
Ответ на: комментарий от anonymous

>Товарищ автор, ты хочешь, чтоб всех вырвало?

я уже просто-таки давно мечтаю, можно сказать ночей не сплю, что всех анонимусов вырвало =)

ale ★★
() автор топика
Ответ на: комментарий от Cy6erBr4in

> Хм... такой вопрос... А что-нить более юзабельное, нежели "превед! медвед!", таким образом собирается? ;) А то знаю я... кросплатформенные эти ваши сборки... %))

proj + geos + gdal + qt4 + [собственная либа создания ГИС-приложений]

win32: + mingw

занимаюсь разработкой ГИС еще с версии qt3

все отлично cобирается на всех платформах, где собирается Qt к проекту еще прикручен autoconf чтобы перед вызовом qmake был настроен prefix и найдены все зависимости

anonymous
()
Ответ на: комментарий от anonymous

>а не планируется взгляд в сторону cmake? а что это за зверь и с чем его едят?

>а то ж вообще скрипт на скрипте :) где? во время установки или использования?

ale ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.