Crashes with libQtUiTools.a if linked multiple times into the same process (with Bsymbolic-functions flag)

Friedrich W. H. Kossebau kossebau at kde.org
Sat May 11 19:53:46 BST 2013


Hi,

tl;dr how to avoid crashes if libQtUiTools.a is linked multiple times into a 
process?


You use at least one of kross, kjsembed, or plasma in your 
application/lib/module and possibly also directly libQtUiTools yourself?

Then bugs.kde.org shows that chances are that you have seen crashes with this 
in the backtrace:
#6  0xb5320313 in 
QFormInternal::domPropertyToVariant(QFormInternal::QAbstractFormBuilder*, 
QMetaObject const*, QFormInternal::DomProperty const*) () from XXX 

where XXX could be libplasma, libkjsembed, krossmoduleforms or your own 
binary/lib/module.

For historic reasons libQtUiTools is a static lib, not a shared, and there has 
been no work to change that, compare https://bugreports.qt-project.org/browse/QTBUG-437

A few days ago I looked into Kross scripts in Calligra the first time, only to 
ran into this problem, as reported to my distri here: 
https://bugzilla.novell.com/show_bug.cgi?id=819437

As can be read in that report, I saw in my backtrace that QFormInternal 
methods are once called in krossmoduleforms.so, once in libkjsembed.so.4 in 
the very same call stack, while they surely should be only done in a single 
place. And Hrvoje Senjan found that linking libQtUiTools.a into the own code 
without Bsymbolic-functions flag seems to avoid the crashes.

So, anyone with more clue than me WRT symbols from static libs and the 
Bsymbolic-functions linker flag who could tell if that indeed should fix such 
problems if code from the same static lib is arriving multiple times in the 
same process via different libs/modules?

If so, should all the places where ${QT_QTUITOOLS_LIBRARY} is linked in 
kdelibs and elsewhere get a blocker to the Bsymbolic-functions flag?
How would that be done, to force this flag to be unset?

What about other non-GCC platforms/compilers, is there a similar problem?

Cheers
Friedrich




More information about the kde-core-devel mailing list