[Development] Use static qt libraries

Thiago Macieira thiago.macieira at intel.com
Tue Jul 24 15:17:23 CEST 2012


On terça-feira, 24 de julho de 2012 16.25.22, Olivier Goffart wrote:
> On Tuesday 24 July 2012 13:06:30 Thiago Macieira wrote:
> > On terça-feira, 24 de julho de 2012 12.13.27, Thiago Macieira wrote:
> > > QFocusHelper
> > 
> > This is a class defined in a .cpp, deriving from QWidget. So it has
> > virtual
> > methods by way of inheritance.
> > 
> > But since it's in a .cpp, we have to conclude it's a compiler bug.
> 
> That class is not instantied: The compiler had no reason to generate a
> destructor or destructor or any type information for a class that never
> exists.

As we established, it's a compiler bug.

> However, doing a static_cast like this class does is an undefined behaviour.
> Qt is broken here.

True, but a static_cast that has worked well for a long time.

> > > QNetworkConfiguration
> > 
> > QNetworkConfiguration has no virtual methods, so there should be no TI
> > emitted for it. In fact, this is the odd-man out class in this list, so
> > much so that I doubt that it's QNetworkConfiguration.
> > 
> > The OP posted a list output from readelf, which cuts symbols. I'm going to
> > guess here that it was either QNetworkConfigurationManager or
> > QNetworkConfigurationManagerPrivate. Both classes have virtuals, both are
> > exported from QtNetwork and both have their non-inline destructors in a
> > .cpp file.
> 
> I think it is QNetworkConfigurationPrivate, since its length is 28 and is
> not instentiated in QtNetwork, but only in bearers plugins.

Ah, indeed.

Here we have a big problem. QNetworkConfigurationPrivate is not exported, so it 
can't be used from the plugins. It should be exported and its virtual 
destructor should be de-inlined.

> > Any of these three classes indicate a compiler bug.
> 
> The question is who needs the typeinfo for those classes? Probably the
> virtual table. But the virtual table has no reason to be emitted for those
> classes because all the virtual method are inline, and the classes are not
> constructed or destructed.

Three things require the TI objects:
 1) the virtual tables
 2) dynamic_cast (includes exception throwing and catching)
 3) typeid()

But, since we're talking about a compiler bug, we are by definition discussing 
a non-conformant behaviour. It can be anything.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
     Intel Sweden AB - Registration Number: 556189-6027
     Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20120724/e7a58df3/attachment.sig>


More information about the Development mailing list