[Qt5-feedback] Qt major versions (was: C++ api to use for UI in addition to QML)
BRM
bm_witness at yahoo.com
Fri May 27 09:33:24 CEST 2011
----- Original Message ----
> From: "Craig.Scott at csiro.au" <Craig.Scott at csiro.au>
> On 25/05/2011, at 10:39 PM, Charley Bay wrote:
>
> > What about out-of-the-box support for static library linking? While not
>perfect for every application, large desktop applications like Maya could
>simply statically-link the required Qt version, and never suffer the
>"anomalies" of system Qt library upgrade.
> I have some sympathy for you with regard to Maya (we also develop plugins for
>Maya). Even if Maya statically linked its own Qt libraries, that wouldn't
>really help you. To be able to pass Qt objects (QWidget, etc.) between your
>plugin and Maya itself, you would need a shared Qt between the two (see below
>for why).
>
>
> > I've built-and-statically-linked Qt, but IMHO it would be nice if the static
>libs were a first-class deployment option (e.g., automatically available when
>Qt is installed, I'm a commercial customer).
> We've found that rather than statically linking to Qt, it is better for us to
>ship our own Qt libraries with our applications and to use launch scripts/apps
>that modify environment variables before launching the real binary. For
>example, we put only launchers in the bin/ directory and we put the real
>binaries in lib/, and the launchers add the lib/ directory to the PATH
>(Windows), LD_LIBRARY_PATH (Linux) or DYLD_LIBRARY_PATH (Mac - with mods for
>frameworks too). Since the environment variables are only augmented when the
>launcher runs and the modifications only apply to the process and not
>system-wide, the changes made don't affect anything else in the system other
>than the specific binaries in your package that you want to use them on. One
>advantage of this is that you don't need to worry about what Qt libraries are
>installed on the system. Another is that if you want to make your application
>available on the system path, you can add your bin/ directory to the PATH and
>not h
> ave to modify the system LD_LIBRARY_PATH or anything like that. You also
>avoid the situation where your own Qt libraries might interfere with the system
>ones (and I've had to work around packages that unfortunately do this when they
>put their bin/directory on the PATH under Windows but they also put their Qt
>libraries in there). By using the launchers approach, you can make your
>executables available to the users system-wide, but you don't have to pollute
>the system's library paths or be affected by the system's Qt libraries (if
>present). We also make our launchers augment QT_PLUGIN_PATH plus a few other
>app-specific things, but you get the idea (hopefully!). Note that this works
>across all platforms, but it only works if you can control the way apps are
>launched. Thus, this won't work for Maya or other situations where you are only
>supplying libraries or plugins for other packages.
>
There is also the various linker options to add the 'lib' directory in your
program path to the binary's search.
We install Qt to /usr/local/TrollTech/Qt-<version> on our systems and link
specifically against that path. No editing LD_LIBRARY_PATH on Linux.
On Windows, you can do the same thing though we just drop the DLLs in parallel
to the executable as you don't typically put the application path in the PATH
anymore, just drop a shortcut on the desktop - and in that respect the shortcut
could have an alternate working path too to achieve the same effect.
All I'm saying is, there are multiple ways to tackle the issue without having to
revert to static/convenience libraries.
Ben
More information about the Qt5-feedback
mailing list