Подтвердить что ты не робот

Статические ссылки и развертывание Qt

Я пытаюсь развернуть (публиковать) простое приложение qt, которое я сделал недавно, но застрял в статической компоновке qt libs.

Я следил за руководством по qt docs для повторной сборки qt и моего приложения статически. Но для сборки релиза по-прежнему требуется qtgui/qtcore dll без каких-либо очевидных причин, интересно, кто-нибудь видел такие проблемы раньше? Или еще лучше, успешно разрешил его?

http://doc.qtsoftware.com/4.5/deployment-windows.html

4b9b3361

Ответ 1

Я написал руководство по статической компоновке

и Как построить статичность Qt с несколькими компиляторами и сохранить ее в малом размере

(потому что он может стать довольно большим, особенно для простых программ). Вы также можете проверить установщик BitRock, который является бесплатным для проектов с открытым исходным кодом.

Короче говоря, он оказывается немного более сложным, если вы используете что-то, что Qt считает плагином, например, поддержка большинства типов изображений (JPEG, GIF) или баз данных. Например, если вы хотите включить поддержку образов СУБД Oracle и GIF для своих значков, вы добавите следующее в свой файл .PRO:

QTPLUGIN += qsqloci qgif
CONFIG += static

Затем вам необходимо:

#include <QtPlugin>

в вашем проекте и импортировать любые используемые плагины. Вам нужно изменить этот порядок настроек, чтобы его можно было компилировать с помощью динамической компоновки (например, при отладке или добавлении функций), хотя это можно легко автоматизировать. Существуют также соображения при построении библиотек Qt для использования со статической связью, хотя инструкции Qt, по крайней мере, начнут работать.

Ответ 2

С Qt 5.5 все довольно просто. Существуют следующие ортогональные настройки, которые вы передаете configure при построении Qt:

  • Вам нужна статическая библиотека Qt?

    -static следует передать в configure

  • Вы хотите, чтобы сборка Qt и вашего приложения использовала статическую среду выполнения С++?

    -static-runtime параметр должен быть передан configure

  • Вы хотите настроить таргетинг на XP?

    -target xp параметр должен быть передан configure

    Кроме того, следуйте инструкциям этого сообщения в блоге.

    Qt Creator не поддерживал XP-таргетинг автоматически, по крайней мере до версии v.3.5.0, так как он не настроил среду для инструментов сборки должным образом. Вы должны изменить среду сборки вручную за сообщение в блоге.

Ответ 3

Кроме того, имейте в виду, что ваша статическая сборка будет динамически связываться с временем работы визуальной студии!

Смотрите этот faq (ссылка на интернет-архив, в случае, если ссылка уходит):

Почему статически построенная Qt использует динамические библиотеки времени исполнения Visual Studio? Нужно ли развертывать их с моим приложением?

Qt построен с использованием ключа -MD (d), который связан с динамическими библиотеками времени исполнения C/С++. Это необходимо, поскольку у нас возникли проблемы с памятью при использовании чего-либо, кроме флага -MD (d), и в целом рекомендуется использовать. Вы не должны изменять этот флаг самостоятельно для своего приложения, потому что он конфликтует с тем, как построена библиотека Qt, если вы измените флаг на -MT. Вы также не должны менять его для Qt, так как это может вызвать проблемы.

Qt по-прежнему создается статически при использовании опции -static, но это означает, что вам не нужно распространять Qt-dll при развертывании вашего приложения. Вам придется распространять время выполнения C (хотя они еще не существуют на целевой машине), см. нашу документацию по развертыванию http://doc.qt.io/qt-5/deployment-windows.html#application-dependencies,

Ответ 4

Я просто скомпилировал приложение статически (Debug) с плагинами QT (5.9), с VS (2015) (Win).

a) Добавьте в свой код.

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

b) Добавьте следующие пути к ссылкам

\5.9.0_x86_static_install\lib
\5.9.0_x86_static_install\bin
\5.9.0_x86_static_install\plugins
\5.9.0_x86_static_install\plugins\platforms
\5.9.0_x86_static_install\plugins\imageformats

c) Добавить список статических библиотек QT и внутренних библиотек VS в список ссылок.

version.lib
imm32.lib
shlwapi.lib
rpcrt4.lib
Ws2_32.lib
Mpr.lib
Netapi32.lib
Rpcrt4.lib
Iphlpapi.lib
winmm.lib
gdi32.lib
advapi32.lib
msimg32.lib
UxTheme.lib
translatord.lib
preprocessord.lib
d3d9.lib
dxguid.lib
libEGLd.lib
libGLESv2d.lib
iphlpapi.lib
psapi.lib
ws2_32.lib
Dwmapi.lib
Qt5CoreD.lib
Qt5Guid.lib
Qt5Xmld.lib
Qt5Widgetsd.lib
Qt5Networkd.lib
Qt5Winextrasd.lib
Qt5PlatformCompositorSupportd.lib
qicod.lib
qtmaind.lib
qtlibpngd.lib
qtharfbuzzd.lib
qtpcre2d.lib
qwindowsd.lib
Qt5FontDatabaseSupportd.lib
Qt5ThemeSupportd.lib
Qt5EventDispatcherSupportd.lib
Qt5AccessibilitySupportd.lib
qtfreetyped.lib

Кевин Хиггинс

Ответ 5

msys2 имеет предварительно построенный статический пакет Qt5

... который, используя CMake, когда задано свойство CMAKE_AUTOSTATICPLUGINS target, также связывает все доступные плагины. (это, в настоящее время, разрешено только с помощью патчей ниже по течению, неофициальное, но оно достигает цели)

Если вы используете qmake, это, по крайней мере, избавит вас от усилий по его созданию.

Ответ 6

вам нужно добавить CONFIG + = static в ваш .pro файл. если это не работает, вы должны предоставить дополнительную информацию.