Ça passe impeccablement sous GCC 4.4, en -Wall -Werror. Pour infos, voici un extrait des erreurs :
/usr/include/QtCore/qlist.h:113: undefined reference to `shared_null'
cache.o: In function `QList::at(int) const':
/usr/include/QtCore/qlist.h:439: undefined reference to `qt_assert_x'
cache.o: In function `QByteArray::~QByteArray()':
/usr/include/QtCore/qbytearray.h:382: undefined reference to `qFree'
cache.o: In function `QString::QString()':
/usr/include/QtCore/qstring.h:868: undefined reference to `shared_null'
cache.o: In function `QList<Logram::Depend*>::at(int) const':
/usr/include/QtCore/qlist.h:439: undefined reference to `qt_assert_x'
cache.o: In function `QList<Logram::ChangeLogEntry*>::detach_helper()':
/usr/include/QtCore/qlist.h:608: undefined reference to `qFree'
cache.o: In function `QList<Logram::ChangeLogEntry*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o: In function `QList<Logram::Package*>::detach_helper()':
/usr/include/QtCore/qlist.h:608: undefined reference to `qFree'
cache.o: In function `QList<Logram::Package*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o: In function `QList<Logram::Depend*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o:/usr/include/QtCore/qlist.h:608: more undefined references to `qFree' follow
cache.o: In function `QString::QString(QString const&)':
/usr/include/QtCore/qstring.h:715: undefined reference to `qt_assert'
cache.o: In function `QList::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
C'est donc LD qui génère ça, et ça ne se produit pas avec GCC. La liste est un peu plus longue mais ne contient pas tous les symboles de Qt, de plus, voici la ligne de commande :
[^] # Re: Pourquoi serait-ce un bug dans Qt ?
Posté par steckdenis . En réponse au journal Clang arrive avec le C++, et ça va faire mal. Évalué à 1.
/usr/include/QtCore/qlist.h:113: undefined reference to `shared_null'
cache.o: In function `QList::at(int) const':
/usr/include/QtCore/qlist.h:439: undefined reference to `qt_assert_x'
cache.o: In function `QByteArray::~QByteArray()':
/usr/include/QtCore/qbytearray.h:382: undefined reference to `qFree'
cache.o: In function `QString::QString()':
/usr/include/QtCore/qstring.h:868: undefined reference to `shared_null'
cache.o: In function `QList<Logram::Depend*>::at(int) const':
/usr/include/QtCore/qlist.h:439: undefined reference to `qt_assert_x'
cache.o: In function `QList<Logram::ChangeLogEntry*>::detach_helper()':
/usr/include/QtCore/qlist.h:608: undefined reference to `qFree'
cache.o: In function `QList<Logram::ChangeLogEntry*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o: In function `QList<Logram::Package*>::detach_helper()':
/usr/include/QtCore/qlist.h:608: undefined reference to `qFree'
cache.o: In function `QList<Logram::Package*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o: In function `QList<Logram::Depend*>::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
cache.o:/usr/include/QtCore/qlist.h:608: more undefined references to `qFree' follow
cache.o: In function `QString::QString(QString const&)':
/usr/include/QtCore/qstring.h:715: undefined reference to `qt_assert'
cache.o: In function `QList::free(QListData::Data*)':
/usr/include/QtCore/qlist.h:649: undefined reference to `qFree'
C'est donc LD qui génère ça, et ça ne se produit pas avec GCC. La liste est un peu plus longue mais ne contient pas tous les symboles de Qt, de plus, voici la ligne de commande :
clang++ -o setup cache.o main.o app.o package.o communication.o string.o source.o repoma.o moc_app.o -L/usr/lib -llgrpkg -lQtCore -L/usr/lib -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread
C'est un bug de clang, ou alors QMake qui ne génère pas ce qu'il faut, ou alors la libQt qui est cassée quand elle n'est pas utilisée par GCC.