windows build

Peter Kümmel syntheticpp at gmx.net
Tue Jun 27 13:31:04 CEST 2006


Thiago Macieira wrote:
> Peter Kümmel wrote:
>> Thiago Macieira wrote:
>>> It looks like this is being caused by the KDE-side of things. Why
>>> should kauthorized.obj define the QList<QVariant>::isEmpty() and
>>> *export* it? That's an inline method defined in qlist.h.
>> Does it export it? kauthorized has its own instantiation and this one
>> conflicts with the instantiation exported by qdbus.
> 
> Isn't this the only reason why it happens?
> 
> If either symbol were not exported, there would be no conflict.

This fixes the linker error:

Index: kconfigbase.h
===================================================================
--- kconfigbase.h       (revision 555414)
+++ kconfigbase.h       (working copy)
@@ -34,6 +34,10 @@
 class Q3StrList;
 #endif

+#ifdef Q_OS_WIN
+template class KDE_IMPORT QList<QVariant>;
+#endif
+
 class KConfigBackEnd;
 class KConfigGroup;
 struct KEntry;


Maybe it is better to declare the export in dbus and
to include in kconfigbase.h the dbus header.



And the instantiation comes from:

template <typename T>
inline QList<T> KConfigBase::readEntry( const char* pKey, const QList<T>& aDefault) const
{
  QVariant::Type wanted = QVariant(T()).type();
#if KCONFIG_QVARIANT_CHECK
  ConversionCheck::to_QVariant<T>();
  ConversionCheck::to_QString<T>();
#else
  kcbError(!QVariant(QVariant::String).canConvert(wanted))
    << "QString cannot convert to \"" << QVariant::typeToName(wanted)
    << "\" information will be lost" << endl;
#endif

  if (!hasKey(pKey))
    return aDefault;

  QList<QVariant> vList;

  if (!aDefault.isEmpty()) {
    foreach (T aValue, aDefault)
      vList.append( aValue );
  }
  vList = readEntry( pKey, vList );

  QList<T> list;
  if (!vList.isEmpty()) {


Each call to this readEntry instantiates at least the ctor and dtor
of QList<QVariant>. I don't know a other solution than importing
the QList<QVariant> code.


More information about the Kde-buildsystem mailing list