1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: http://www.gnu.org/copyleft/fdl.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
\page deployment-plugins.html
\title Deploying Plugins
\brief A guide to plugins-specific aspects of deploying Qt and Qt Application
This document explains how to deploy plugin libraries that Qt or
your application should load at runtime. If you use
\l{How to Create Qt Plugins#Static Plugins}{static plugins}, then the
plugin code is already part of your application executable, and no
separate deployment steps are required.
\tableofcontents
\section1 The Plugin Directory
When the application is run, Qt will first treat the application's
executable directory as the base directory for searching for plugins.
For example if the
application is in \c{C:\Program Files\MyApp} and has a style plugin,
Qt will look in \c{C:\Program Files\MyApp\styles}. (See
QCoreApplication::applicationDirPath() for how to find out where
the application's executable is.) Qt will also look in the
directory specified by
QLibraryInfo::location(QLibraryInfo::PluginsPath), which typically
is located in \c QTDIR/plugins (where \c QTDIR is the directory
where Qt is installed). If you want Qt to look in additional
places you can add as many paths as you need with calls to
QCoreApplication::addLibraryPath(). And if you want to set your
own path or paths you can use QCoreApplication::setLibraryPaths().
You can also use a \c qt.conf file to override the hard-coded
paths that are compiled into the Qt library. For more information,
see the \l {Using qt.conf} documentation. Yet another possibility
is to set the \c QT_PLUGIN_PATH environment variable before running
the application. If set, Qt will look for plugins in the
paths (separated by the system path separator) specified in the variable.
\note \c QT_PLUGIN_PATH should not be exported as a system-wide
environment variable since it can interfere with other Qt installations.
\section1 Loading and Verifying Plugins Dynamically
When loading plugins, the Qt library does some sanity checking to
determine whether or not the plugin can be loaded and used. This
provides the ability to have multiple versions and configurations of
the Qt library installed side by side.
\list
\li Plugins linked with a Qt library that has a higher version number
will not be loaded by a library with a lower version number.
\br
\b{Example:} Qt 5.0.0 will \e{not} load a plugin built with Qt 5.0.1.
\li Plugins linked with a Qt library that has a lower major version
number will not be loaded by a library with a higher major version
number.
\br
\b{Example:} Qt 5.0.1 will \e{not} load a plugin built with Qt 4.8.2.
\br
\b{Example:} Qt 5.1.1 will load plugins built with Qt 5.1.0 and Qt 5.0.3.
\endlist
When building plugins to extend an application, it is important to ensure
that the plugin is configured in the same way as the application. This means
that if the application was built in release mode, plugins should be built
in release mode, too. Except for Unix operating systems, plugins build in
a different mode will not get loaded by the plugin system.
If you configure Qt to be built in both debug and release modes,
but only build applications in release mode, you need to ensure that your
plugins are also built in release mode. By default, if a debug build of Qt is
available, plugins will \e only be built in debug mode. To force the
plugins to be built in release mode, add the following line to the plugin's
project file:
\code
CONFIG += release
\endcode
This will ensure that the plugin is compatible with the version of the library
used in the application.
\section1 Debugging Plugins
There are a number of issues that may prevent correctly-written plugins from
working with the applications that are designed to use them. Many of these
are related to differences in the way that plugins and applications have been
built, often arising from separate build systems and processes.
The following table contains descriptions of the common causes of problems
developers experience when creating plugins:
\table
\header \li Problem \li Cause \li Solution
\row \li Plugins sliently fail to load even when opened directly by the
application. \QD shows the plugin libraries in its
\gui{Help|About Plugins} dialog, but no plugins are listed under each
of them.
\li The application and its plugins are built in different modes.
\li Either share the same build information or build the plugins in both
debug and release modes by appending the \c debug_and_release to
the \l{qmake Variable Reference#CONFIG}{CONFIG} variable in each of
their project files.
\endtable
You can also use the \c QT_DEBUG_PLUGINS environment variable to obtain
diagnostic information from Qt about each plugin it tries to load. Set this
variable to a non-zero value in the environment from which your application is
launched.
*/
|