Как с помощью Qt собрать dll статически (windows)?

Имеется статическая сборка Qt. Эксешник (*.exe) собранный с помощью этой сборки имеет размер примерно ~12Мб и нормально запускается.

А вот библиотеку собрать не получается. Точнее, собраться-то она собирается, имеет размер аж ~18МБ, но при попытке подключить её, приложение вылетает с ошибкой <<This application failed to start because it could not find or load the Qt platform plugin "windows">>.
Всё. В сообщении даже нет упоминания о том, какие плагины обнаружены.

  • Я попробовал скопировать плагин "platforms/qwindows.dll" в папку с проектом - не помогло;
  • копировал все плагины вместе с папкой "platforms" и отдельно от нее в папку с приложением - не помогло;
  • копировал дополнительные библиотеки icu*XX.dll, libgcc*.dll, libstdc*.dll, libEGL, libGLES в папку с проектом - безрезультатно;
  • пробовал копировать все эти библиотеки в папку "windows/system32" - тоже не помогло...


Облазил все интернеты и нашел такое вот решение, но после добавления qwindows.lib в проект, библиотека линкуется как-то не полностью что-ли, "худеет" сразу на 5МБ и теперь ее вес составляет ~12МБ, а при попытке подключить ее в приложении получаю стандартную ошибку о том, что файл "Qt5Core.dll" не найден, а за ним и все остальные зависимости: Qt5Gui, Qt5Network, Qt5Qml.... после добавления всех этих библиотек в папку с проектом, всё запускается и прекрасно работает, но сам дистрибутив при этом весит почти 90МБ =) и это со статической линковкой!?

  • Библиотека без статической линковки весит всего 17КБ, но требует кучу либ из Qt5 (почти 60МБ);
  • со статической линковкой и внесенными изменениями - 12МБ, но при этом тоже тащит за собой все зависимости Qt5;
  • а библиотека собранная без добавления qwindows.lib в проект весит 18МБ, но не запускается вообще...
Как быть? Есть идеи?

Вот файл .pro:
QT       += widgets qml quick network core gui

TARGET = phpqml
TEMPLATE = lib
CONFIG += static dll qt thread

SOURCES += phpqml.cpp

HEADERS += phpqml.h

#INCLUDEPATH = C:/Qt/Qt5.3.0_Static/include
INCLUDEPATH += C:/src/php-5.3.26\
    C:/src/php-5.3.26/main\
    C:/src/php-5.3.26/Zend\
    C:/src/php-5.3.26/sapi\
    C:/src/php-5.3.26/TSRM

LIBS += -L$$PWD/../../../src/php-5.3.26-/dev/ -lphp5ts\
        -L$$PWD/../../../Qt/Qt5.3.0_Static/plugins/platforms/ -lqwindows

INCLUDEPATH += $$PWD/../../../src/php-5.3.26
DEPENDPATH += $$PWD/../../../src/php-5.3.26

OTHER_FILES += \
    phpqml.qml


Заголовочный .h:
#include <QApplication>
#include <QQuickView>
#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin)
...
  • Вопрос задан
  • 2014 просмотров
Пригласить эксперта
Ответы на вопрос 1
@TriKrista
Я давно таким не занимался.
Но, насколько я помню, надо пересобрать Qt в static.

Но, размер не особо поменяется, просто будет цельный кусок. Как по мне, лучше уж динамическая сборка.
Ответ написан
Ваш ответ на вопрос

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

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