Как с помощью 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)
...
  • Вопрос задан
  • 1511 просмотров
Пригласить эксперта
Ответы на вопрос 1
@TriKrista
Я давно таким не занимался.
Но, насколько я помню, надо пересобрать Qt в static.

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

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

Войти через центр авторизации
Похожие вопросы