Статические сборки dll с QtQuick модулей

Статические сборки dll с QtQuick модулей

560

В данной статье я попробую просто разъяснить как статически скомпилированные dll с QtQuick модулей. Облазили все в вебах, мне так и не удалось отыскать решение вашей трудности, и оказалось, он был у меня под носом. Хороший день, читатели.
Рабочая среда: для Windows 8.1 Начнем с самого начала, а конкретно с отлучения от библиотеки QT *.dll файлы. Действовала: с QT-для Windows-х86-компилятор mingw-5.5.0-РЦ снимок из 95 2015.06.17.

Раз у вас уже есть статическая сборка QT, не стесняйтесь пролистать данное управление, чтоб выделить. Сходу предупрежу, что этот билд будет вырезать QtWebKit. я был четыре раза перестроить различных версиях QT, до этого чем он собрал dll файлов были загружены как следует. Знаю, что таковых статей уже много, но что делать…
Итак, давайте начнем!
Скачайте нужное программное обеспечение:

на самом деле, на QT 5.5.0-РЦ (не могу огласить, что эта ссылка будет выжить опосля официального релиза версии 5.5.0)
На QT-ФОК-5.5.0-РК
На Perl (версия на момент сборки: 5.22.0.1)
Питон (3.4.3)
Рубин (2.2.2)

Полностью может быть, что Python и Ruby не необходимы, но ведь во всех руководствах они оба показываются как «неотклонимые» и мы не желаем сюрпризов, установите их.

С меня хватит C:/Qt для QT и его источник, и C:/dev для остального программного обеспечения. При установке QT не забудьте отметить флаг с QT -> инструменты -> компилятор mingw. Установить/распаковать в всякую директорию.

Конфигурация установки

Источник неинтерактивного использования нет необходимости устанавливать, мы скачали их раздельно в архиве (наверняка и распаковали?), с ними и будем работать.

Дерево
C:/dev/StrawberryPerl
C:/dev/Ruby22
C:/dev/Python34
C:/Qt/Qt5.5.0 — установленная версия QT
C:/Qt/qt-everywhere-opensource-src-5.5.0-rc — распаковал источник

Запустить qmake конфигурации:

откройте файл с помощью QT-везде-с открытым начальным кодом-ФОК-5.5.0-РЦ/qtbase/mkspecs/Win32 с-г++/qmake так.конф
находим строчку
QMAKE_LFLAGS =

и заменить его:
QMAKE_LFLAGS = -static-статика-на libgcc
(Я 5.5.0-РЦ было 70 строчка)

Загадочный баг с qmldebugger
liblibQt5Qml.a(qqmldebugserver.o):qqmldebugserver.cpp: неопределенная ссылка на `QTcpServerConnection::QTcpServerConnection()’
Правильноиз-за этого бага, на самом деле, я должен был получить две из 4 версий QT, пока я не отыскала в вебе описание данной трудности. К огорчению, я так и не сообразил что за место пришлось патч патч (буду рада, раз вы будете говорить), так что было чрезвычайно конструктивно и некрасиво: опасный вырезать ошибочная строчка начального кода. Я думаю, что практика таковых актов не непременно, но как лишь вы =)
Раз вы желаете рискнуть и пожертвовать свое время, то не меняй источник, и настроить сборку с возможностью -в qml-отладка, может быть, неувязка станет неактуальной. П. с.: Я не совершенно уверен, что это то, что в итоге сэкономило мое время и нервишки, поэтому что сразу с сиим конфигурацией, я добавил параметр -в qml-отладки в коллектор.
Перейдите в каталог с QT-везде-с открытым начальным кодом-ФОК-5.5.0-РЦqtdeclarativeницв qmlотладчика, откройте файл обидеть qqmldebugserver.cpp и комментировать неугодные строчки:
#раз определен(QT_STATIC) &&! определенными(QT_NO_QML_DEBUGGER)
/ / для #include «../../плагины/qmltooling/qmldbg_tcp/qtcpserverconnection.ч» < —- комментировать
#за endif

Запускаем терминал компилятор mingw
Запуск -> все программы -> QT с 5.5.0 -> 5.5 -> компилятор mingw
и накормил его код таковой:
# НЕ ЗАБУДЬТЕ ПОМЕНЯТЬ ПУТИ НА СВОИ! набор QTSRC=С:на QTQT, который-везде-с открытым начальным кодом-ФОК-5.5.0-РК
набор MINGWPATH=С:на QTQt5.5.0инструментыmingw492_32бин
набор QTPREFIX=с:QT с5.5.0_Static
набор PYPATH=с:девPython34
набор PERLPATH=с:девКлубникана Perlbin в
набор RUBYPATH=с:девRuby22бин

где:
QTSRC — распаковал начальный код библиотеки QT
MINGWPATH — путь к mingw устанавливается совместно с QT
QTPREFIX — место, где будет установлен статическую сборку QT
PYPATH — путь к установленному питона
PERLPATH — путь к папке bin перла
RUBYPATH путь к Руби папку bin
Отмечу, что для плагинов без бубна не будет довольно собрать только один qtbase, потому идем в папку с начальным кодом %QTSRC% и собирать все, что там есть. последующий:
набор QTDIR=%QTSRC%qtbase
установить путь=%путь%;%MINGWPATH%;%PYPATH%;%PERLPATH%;%RUBYPATH%;%QTDIR%/bin в
кд %QTSRC%
команды mkdir nomake
двигаться qtwebkit nomake
двигаться qtwebkit-nomake примеры

вот пути поиска двоичных файлов, и крайние две строчки вырезаны на базе WebKit из сборки (флаг-нет-движок WebKit исчез из конфигурационного файла).

Запускаем конфигуратор:
настройка-статический-релиз-с открытым начальным кодом-доказательства-лицензия-OpenGL с рабочего стола-нет-угол-в qml-отладка в C++11-Платформа Win32-G++ и-на QT-библиотеке zlib-в QT-формате pcre-на QT-библиотека libpng-QT с-помощью libjpeg-QT с-функций freetype-нет-пакета openssl-библиотеки делают-делают инструменты-nomake примеры-nomake испытания-префикс %QTPREFIX%
сетакон?
-статический — без комментариев;
-отпустите, — указать, что собирать будут лишь версии (и раз для вас нужна отладка, то поменять его -отладка);
-с открытым начальным кодом-доказательства-лицензии — согласен с лицензией;
-OpenGL для рабочего стола сборка для «naselnikov»;
-нет-угол — «избавится от libEGL, libGLES, спасибо таковых как taraflex: Тостер;
Параметр, который может вылечить baig с qmldebugger (пункт 4); -в qml-отладка — отладка разрешают Кумлы.
— разрешить применять; -в C++11 — …
-Платформа Win32-G++и — мотивированная Платформа (да, лишь 32-бит);
-на QT-библиотеке zlib-в QT-формате pcre-на QT-библиотека libpng-QT с-помощью libjpeg-QT с-функций freetype — булочка;
-нет-пакета openssl — отключить SSL (мне не необходимо);
-сделать библиотеки — мы будем должны выстроить dll;
Раз она для вас не нужна, замените на -nomake инструменты; Таковой ассистент, дизайнер и языковед. -изготавливать инструменты — коммунальные сервисы сомнительной необходимости, что я решил бросить.
Пойду О-О-О-О-О-О-чень долго, так что лучше не включать; -nomake примеры-nomake испытания — примеры и испытания.
(%QTPREFIX% был установлен в начале 5-ого пт); -префикс %QTPREFIX% — указать, куда ставить последующий билд.

раз для вас нужна наиболее модулей, к примеру, модуль SQLite, то читайте файл readme либо используйте настроить-помочьувидеть, какой параметр вы желаете добавить в конфигураторе.

Пуск построения:
mingw32-делает-K
е. раз у вас многоядерный процессор, вы должны указать ассемблеру число вариант -Дж[colechester — 1]. за мои 4 ядра процессора я побежал коллектора:
mingw32-сделать-к-ж3

параметр -K и вроде заказы коллекционера остановится, раз вдруг «что-то пошло не так». У меня есть эта противная ситуация не коснулась, потому спорить не буду. с. Т. с.

Запустите установку:
mingw32-сделать установить

опосля этого мы должны узреть в директории %QTPREFIX% собранных библиотек.

Добавить набор для сборки статики:
запустить QtCreator, который был установлен совместно с Qt5.5.0-РК
идем во вкладку инструменты > характеристики > сборка и пуск > профили QT, добавление новейших для qmake в каталоге %QTPREFIX%5.5.0bin папку, именовать это что-то вроде «QT в %{на QT:версия} (%{на QT:Версия}_Static)» и нажмите «применить»
Версии QT

перебегаем на вкладку «наборы», нажмите клавишу «добавить»игру, что-то вроде: «Qt5.5.0-статические», компилятор: компилятор mingw, профиль: «QT в %{на QT:версия} (%{на QT:Версия}_Static)», нажмите клавишу «ОК»
Комплекты

В любом случае, вот и все. И сейчас, в конце концов, самое увлекательное.

Статические сборки dll с QtQuick модулей
Сделайте новейший проект в QtCreator е:

Файл > новейший проект… > библиотека > Библиотека (на C++ > динамические библиотеки
выбрать наш набор в сборе (Qt5.5.0-статические)
откройте файл %имя проекта%_global.ч

Весь смысл, что библиотеки dll, статически не собирался (точнее были, но были неработоспособны) был тот факт, что шаблон (шаблон), используемый для построения библиотеки dll (либ) не включает связывание плагинов. Потому все они должны ввести его вручную в segelboote и .Pro файл. Чтоб получить перечень всех нужных плагинов было не трудно:

сделайте новейший проект «приложение на QT стремительная»
скомпилировать его с тем же набором Qt5.5.0-статическое (не забудьте указать Тип сборки — Релиз)
перейдите в каталог со скомпилированным проектом: стройку-%имя_проекта%-Qt5.5.0_Static-Релиз и лицезреем два я отыскал:
%имя_проекта%_plugin_import.cpp
%имя_проекта%_qml_plugin_import.cpp
содержит перечень всех подгружаемых на равнине в qml-приложения-плагины, а конкретно:
#включить <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Q_IMPORT_PLUGIN(QDDSPlugin)
Q_IMPORT_PLUGIN(QICNSPlugin)
Q_IMPORT_PLUGIN(QICOPlugin)
Q_IMPORT_PLUGIN(QJp2Plugin)
Q_IMPORT_PLUGIN(QMngPlugin)
Q_IMPORT_PLUGIN(QTgaPlugin)
Q_IMPORT_PLUGIN(QTiffPlugin)
Q_IMPORT_PLUGIN(QWbmpPlugin)
Q_IMPORT_PLUGIN(QWebpPlugin)
Q_IMPORT_PLUGIN(QtQuick2Plugin)
Q_IMPORT_PLUGIN(QTcpServerConnection)
Q_IMPORT_PLUGIN(QGenericEnginePlugin)
Q_IMPORT_PLUGIN(QNativeWifiEnginePlugin)
Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)

все, что для вас необходимо добавить заголовочный файл библиотеки (%имя проекта%_global.ч
в этом же каталоге откройте файл make-файл.Релиз и достал оттуда нужную информацию, а конкретно перечень библиотек, которые должны быть подключены к проекту:
Каталог libs = -lmingw32-ЖХ:/шт/5.5.0_Static/либ-lqtmain-ЖХ:/шт/5.5.0_Static/в qml/QtQuick.2-lqtquick2plugin-ЖХ:/шт/5.5.0_Static/в qml/QtQuick/окна.2-lwindowplugin-ЖХ:/шт/5.5.0_Static/плагины/платформ-lqwindows-lwinspool-lshlwapi-lQt5PlatformSupport-lqtfreetype-ЖХ:/шт/5.5.0_Static/плагины/imageformats-lqdds-lqicns-lqico-lqjp2-lqmng-lqtga-lqtiff-lqwbmp-lqwebp-ЖХ:/шт/5.5.0_Static/плагины/qmltooling-lqmldbg_qtquick2-lQt5Quick-lQt5Gui-lcomdlg32-loleaut32-limm32-lwinmm-lglu32-lopengl32-lgdi32-lqtharfbuzzng-lqmldbg_tcp-lQt5Qml-ЖХ:/шт/5.5.0_Static/плагины/на предъявителя-lqgenericbearer-lqnativewifibearer-lQt5Network-ldnsapi-lQt5Core-lole32-luuid-lws2_32-ladvapi32-lshell32-luser32-lkernel32-lmpr-lqtpcre

все это нужно будет добавлено в .Pro-файл вашего грядущего проекта (перечень может различаться в зависимости от версии и какие модули включить/отключить при сборке QT, так что лучше скопировать этот перечень с вашего компа). Это не повредит, чтоб добавить путь к заголовочные файлы, статические сборки QT:
INCLUDEPATH += C:/Qt/Qt5.5.0_Static/include

Что ты собираешься с ним делать я не знаю, но надеюсь кому-то эта информация будет полезна 🙂 Опосля внесения этих конфигураций в проект, вы можете собрать «мини-фреймворк» QtQuick в виде отдельной библиотеки dll.

.Pro-файл моего проекта ‘MyDll’на QT += Core с виджетов, qml с стремительная

Файл config += dll файлы

Шаблон = либерал

Цель = mydll

Описывает += MYDLL_LIBRARY

Источники += mydll.cpp

Заглавия += mydll.ч
файл objectfactory.ч

INCLUDEPATH += C:/Qt/Qt5.3.0_Static/include

Каталог libs += -lmingw32
-ЛК:/шт/5.5.0_Static/либ-lqtmain
-ЛК:/шт/5.5.0_Static/в qml/QtQuick.2-lqtquick2plugin
-ЛК:/шт/5.5.0_Static/в qml/QtQuick/окна.2-lwindowplugin
-ЛК:/шт/5.5.0_Static/плагины/платформ-lqwindows-lwinspool-lshlwapi-lQt5PlatformSupport-lqtfreetype
-ЛК:/шт/5.5.0_Static/плагины/imageformats-lqdds-lqicns-lqico-lqjp2-lqmng-lqtga-lqtiff-lqwbmp-lqwebp
-ЛК:/шт/5.5.0_Static/плагины/qmltooling-lqmldbg_qtquick2-lQt5Quick-lQt5Gui-lcomdlg32-loleaut32-limm32-lwinmm-lglu32-lopengl32-lgdi32-lqtharfbuzzng-lqmldbg_tcp-lQt5Qml
-ЛК:/шт/5.5.0_Static/плагины/на предъявителя-lqgenericbearer-lqnativewifibearer-lQt5Network-ldnsapi-lQt5Core-lole32-luuid-lws2_32-ladvapi32-lshell32-luser32-lkernel32-lmpr-lqtpcre

mydll.ч#ifndef MYDLL_H
#найти MYDLL_H

#включить <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Q_IMPORT_PLUGIN(QDDSPlugin)
Q_IMPORT_PLUGIN(QICNSPlugin)
Q_IMPORT_PLUGIN(QICOPlugin)
Q_IMPORT_PLUGIN(QJp2Plugin)
Q_IMPORT_PLUGIN(QMngPlugin)
Q_IMPORT_PLUGIN(QTgaPlugin)
Q_IMPORT_PLUGIN(QTiffPlugin)
Q_IMPORT_PLUGIN(QWbmpPlugin)
Q_IMPORT_PLUGIN(QWebpPlugin)
Q_IMPORT_PLUGIN(QtQuick2Plugin)
Q_IMPORT_PLUGIN(QTcpServerConnection)
Q_IMPORT_PLUGIN(QGenericEnginePlugin)
Q_IMPORT_PLUGIN(QNativeWifiEnginePlugin)
Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)

#включить <QGuiApplication>
#включить <QQuickView>

класс MyDll
{
… };

#за endif
habrahabr.ru