Развертывание приложения в Windows
|
Компонент | Имя файла | |
---|---|---|
Исполняемый файл | plugandpaint.exe | |
Подключаемый модуль основных инструментов | plugins\pnp_basictools.dll | |
Подключаемый модуль ExtraFilters | plugins\pnp_extrafilters.dll | |
Модуль Qt Core | qtcore4.dll | |
Модуль Qt GUI | qtgui4.dll |
Кроме того, архив должен содержать следующие специальные библиотеки компилятора, зависящие от вашей версии Visual Studio:
VC++ 6.0 | VC++ 7.1 (2003) | VC++ 8.0 (2005) | |
---|---|---|---|
The C run-time | msvcrt.dll | msvcr71.dll | msvcr80.dll |
The C++ run-time | msvcp60.dll | msvcp71.dll | msvcp80.dll |
Чтобы проверить, что приложение теперь можно успешно развертывать, распакуйте этот архив на машине без Qt и любых установленных компиляторов и попробуйте запустить его.
Альтернативой помещению подключаемых модулей в подкаталог является добавление пользовательского пути поиска при запуске вашего приложения используя QApplication::addLibraryPath() или QApplication::setLibraryPaths().
qApp->addLibraryPath("C:\some\other\path");
Одним из преимуществ использования подключаемых модулей является то, что из легко можно сделать доступными для целого семейства приложений.
Более удобным часто бывает добавление пути в функцию приложения main(), сразу после создания объекта QApplication. Раз путь добавлен, то приложение будет искать там свои подключаемые модули, кроме как в подкаталоге plugins собственного каталога приложения. Может быть добавлено любое количество дополнительных путей.
При развертывании приложения, скомпилированного с помощью Visual Studio 2005 onwards, принимается несколько дополнительных шагов.
Во-первых, нам нужно скопировать файл манифеста,созданный при линковке приложения. Этот файл манифеста содержит информацию о зависимостях приложения в расположенных рядом сборках (side-by-side assemblies), таких как библиотеки времени выполнения.
Файл манифеста необходимо скопировать в тот же каталог, что и исполняемый файл приложения. Вам не нужно копировать файлы манифеста для разделяемых библиотек (DLL), поскольку они не используются ими.
Если разделяемая библиотека имеет зависимости, отличные от использующего ее приложения, то файл манифеста необходимо встроить в двоичный код DLL. Начиная Qt 4.1.3, следующие опции CONFIG доступны для встроенных манифестов:
embed_manifest_dll embed_manifest_exe
Для использования опции добавьте
CONFIG += embed_manifest_exe
в ваш .pro-файл. Опция embed_manifest_dll разрешена по умолчанию.
Вы можете найти больше информации о файлах манифеста и расположенных рядом сборках на веб-сайте MSDN.
Имеется два способа включения библиотек времени выполнения: непосредственное связывание их с вашим приложением или их установкой на системе конечного пользователя.
Для связывания библиотек времени выполнения с вашим приложением скопируйте каталог
<Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC80.CRT
в каталог с вашим исполняемым файлом, так что вы включили каталог Microsoft.VC80.CRT поблизости от исполняемого файла вашего приложения. Если связали библиотеки времени выполнения и нужно развернуть подключаемые модули, то из подключаемых модулей вам нужно удалить манифест (встроенный как ресурс) добавив следующую строку в .pro-файл подключаемых модулей, которые вы компилируете:
CONFIG-=embed_manifest_dll
Предупреждение: Если вы пропустили вышеприведенный шаг, подключаемые модули не будут загружаться на некоторых системах.
Для установки библиотек времени выполнения системе конечного пользователя, вам нужно включить соответствующий исполняемый файл Visual C++ Redistributable Package (VCRedist) в ваше приложение убедиться, что он запускается при установке приложения пользователем.
Например, для 32-битной x86-совместимой системе, вы должны включить исполняемый файл vcredist_x86.exe. Исполняемые файлы vcredist_IA64.exe и vcredist_x64.exe предоставляют соответствующие библиотеки для IA64 и 64-битной x86 архитектур соответственно.
Замечание: Распространяемое вами приложение должно компилироваться с в точности той же версией компилятора вместе с той же версией времени выполнения Cи. Это предотвращает ошибки развертывания, вызываемых разными версиями библиотек времени выполнения Cи.
Специфичные библиотеки компилятора, зависящие от конфигурации, должны распространяться вместе с вашим приложением. Вы можете проверить какие библиотеки слинкованы с вашим прилжоением с помощью инструмента Dependency Walker. Все что вам нужно - это запустить его примерно так:
depends <исполняемый файл приложения>
Это предоставит список библиотек, от которых зависит ваше приложение, и другую информацию.
Если с помощью инструмента depends изучить release-сборку исполняемого файла Plug & Paint (plugandpaint.exe), то инструмент перечислит следующие непосредственные зависимости от несистемных библиотек:
Qt | VC++ 6.0 | VC++ 7.1 (2003) | VC++ 8.0 (2005) | MinGW |
---|---|---|---|---|
|
|
|
|
Если изучить файлы DLL подключаемого модуля будут перечислены точно такие же зависимости.
Ваше приложение может также зависить от одного или более подключаемых модулей Qt, таких как подключаемый модуль формата изображения JPEG или подключаемый модуль драйвера SQL. Убедитесь, что вы распространяете все необходимые вашему приложению подключаемые модули Qt, и обратите внимание на то, что каждый тип подключаемого модуля должен находиться внутри специального подкаталога (таких как imageformats или sqldrivers) в вашем каталоге, как описано ниже.
Замечание: Если вы развёртываете приложение, которое использует QtWebKit, чтобы отображать HTML-страницы из интернета, то вы должны включить все подключаемые модули текстовых кодеков, чтобы поддержать настолько много HTML-кодировок насколько это возможно.
Путь поиска для подключаемых модулей жестко запрограммировано в библиотеке QtCore. По умолчанию, подкаталог подключаемых модулей в каталоге установленной Qt является первым в пути поиска подключаемого модуля. Тем не менее, заранее заданные пути, аналогичные пути по умолчанию, имеют определённые недостатки. Например, они могут не существовать на целевой машине. По этой причине вам нужно изучить различные альтернативы, чтобы обеспечить нахождение подключаемых модулей Qt:
Если вы добавили свой путь используя QApplication::addLibraryPath он может выглядеть примерно так:
qApp->addLibraryPath("C:/customPath/plugins");
Затем qApp->libraryPaths() возвратит что-нибудь такое:
"C:/customPath/plugins " "C:/Qt/4.5.3/plugins" "E:/myApplication/directory/"
Исполняемый файл будет искать подключаемые модули в этих каталогах и том же порядке, в каком они упорядочены в QStringList, возвращённом qApp->libraryPaths(). Вновь добавленные пути добавляются в начало qApp->libraryPaths(), что означает, что поиск будет идти начиная с первого. Однако, если вы используете qApp->setLibraryPaths(), вы должны быть способны определить, в каких путях и в каком порядке будем их искать.
Документ Как создавать плагины Qt очертит вопросы, которым вам нужно уделить внимание при разработке и распространении подключаемых модулей для приложений Qt.
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies) | Торговые марки | Qt 4.5.3 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |