Задать вопрос

Сборка QT 5.0.1 static

Добрый день.
Написал небольшое приложение на QT, хочу сделать его доступным не только на моем ноутбуке, но и для всех остальных. У меня Windows 7 64 bit, хотелось бы, чтобы приложение работало и на XP 32 bit.
Вообщем что я сделал, и чего добился:
1. Для начала со страницы qt-project.org/downloads скачал «Qt 5.0.1 for Windows 32-bit (MinGW 4.7, 823 MB)». Именно 5-я версия мне не нужна, но для нее есть пакет «все внутри», с компилятором и всем-всем-всем.
2. При установке поставил все компоненты, включая Src.

Установлено все в D:\Qt, в итоге имею следующую структуру папок:
В D:\QT папка QT5.0.1, в которой папки:
5.0.1
Licenses
Tools

Внутри 5.0.1 папки mingw47_32 и Src.
Путь к g++.exe и mingw32-make.exe — D:\Qt\Qt5.0.1\Tools\MinGW\bin

На этом этапе проверил, что мое приложение компилируется и запускается. Правда только из Qt Creator. Попытка перенести его не увенчалась успехом.
Скопировал к нему все библиотеки, про которые Dependency Walker сказал, однако все равно не запускается. Ну да не суть, тащить с приложением размером 150 кб библиотек на 40 мб идея не очень. Решил собрать static.

Пути, про которые пишут в документации и в статьях на хабре, у меня почему-то выглядят совсем иначе. Возможно, из-за того, что версия Qt не 4.8, а 5.0
Вообщем configure.exe я нашел в D:\Qt\Qt5.0.1\5.0.1\Src\qtbase
qmake.conf я исправил в двух местах, в D:\Qt\Qt5.0.1\5.0.1\Src\qtbase\mkspecs\win32-g++ и в D:\Qt\Qt5.0.1\5.0.1\mingw47_32\mkspecs\win32-g++
В обоих файлах опцию «QMAKE_LFLAGS = » я заменил на «QMAKE_LFLAGS += -static»
После этого установил Perl и в каталоге D:\Qt\Qt5.0.1\5.0.1\Src\qtbase выполнил сначала:

SET QTDIR=D:\Qt\Qt5.0.1\5.0.1\
SET PATH=D:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin;D:\Qt\Qt5.0.1\Tools\MinGW\bin;D:\Perl\perl\bin;%PATH%

configure -opensource -release -nomake examples -nomake demos -nomake tools -nomake translations -nomake docs -no-rtti -no-openssl -no-opengl -static -platform win32-g++

А затем «mingw32-make»

Минут за 15-20 оно скомпилировалось, ошибок не выдало.

Однако теперь, при попытке собрать приложение из Qt Creator я получаю ошибки вида
«skipping incompatible D:\Qt\Qt5.0.1\5.0.1\mingw47_32\lib\libQt5Gui.a when searching for -lQt5Gui»
«cannot find -lQt5Gui»

Чего я хочу добиться:
Мне по большому счету не нужен QT Creator и прочее (я пишу и испытываю приложение в линуксе, а пользователи на windows). Я бы хотел иметь минимум для статичной сборки приложения как в линуксе — запустил в папке «make clean && qmake -project && qmake && make» и получил готовый .exe
Ну и понять, что не так я сделал и почему компиляция сломалась.
  • Вопрос задан
  • 11920 просмотров
Подписаться 8 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Thekondr
@Thekondr
Согласно моему опыту, в QTDIR лучше указывать путь до qtbase, а так же в PATH путь до qtbase\bin, хотя если у Вас все скомпилировалось без проблем, то видимо дело не в этом.

Скорее всего тут проблема в платформе, например скомпилирована 32-битная версия библиотеки, а приложение у Вас 64-битное, или что-то в этом роде.

Однако, Вы должны учитывать, что согласно LGPL лицензии, при использовании статической версии библиотеки, все исходные коды программ, должны быть выложены в открытый доступ.

Относительно первой проблемы с динамической версией: Dependency Walker не учитывает (ибо не может учесть) необходимость загружать в runtime плагины Qt. Поищите в папке 5.0.1 папку plugins и скопируйте ее содержимое (а не ее саму) в директорию к exe файлу. В редких случаях тоже самое нужно проделать с папкой imports.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы