[Interest] crashing when incompatible qt already exists on user's system
Bob Hood
bhood2 at comcast.net
Tue Aug 14 04:33:53 CEST 2012
On 8/13/2012 7:31 PM, Justin Karneges wrote:
> Hi folks,
>
> It appears that MinGW's C++ ABI is not reliable between releases. I don't know
> how often this happens, but in any case I've witnessed the following issue:
>
> - Build machine has C:\Qt\4.8.2, built using a recent MinGW compiler. This
> machine builds my application.
> - User's machine has C:\Qt\4.8.2, built using an older MinGW compiler (for
> example, the binary package offered at qt.nokia.com). This installation of Qt
> is not required to run the application, it merely happens to be there because
> the user is also a Qt developer, perhaps working on other projects.
> - When user runs the application generated by the build machine, the app
> attempts to load plugins from C:\Qt\4.8.2\plugins on the user's machine. The
> ABIs don't match, and the application crashes.
>
> I can think of a few solutions:
>
> 1) Build machine should use a Qt path that is unlikely to exist on a machine
> that the app is deployed to.
>
> 2) Remove C:\Qt\4.8.2\plugins from the plugin paths somehow (maybe this could
> be done at runtime, with QCoreApplication::removeLibraryPath(), though I don't
> know if this would have an effect on paths that are compiled into the lib
> directly).
>
> 3) When building your own Qt, pass -buildkey to configure, so that Qt rejects
> plugins that weren't built against the same Qt. This could work as long as the
> signature check itself doesn't end up triggering an ABI-related crash. For
> example, if nothing at the linking level could cause a crash, and the qtplugin
> checks are pure C, then maybe this would be a safe choice.
>
> I'm curious to know how others out there have mitigated this problem.
What about using a qt.conf file with:
[Paths]
Prefix = .
with the plugins/ folder containing plug-ins known to work with the
application in the same folder as the application, or:
[Paths]
Plugins = <path_to_plugins>
and a plugins/ folder containing the same content pointed to by that path.
More information about the Interest
mailing list