• [^] # Re: Pourquoi serait-ce un bug dans Qt ?

    Posté par . En réponse au journal Clang arrive avec le C++, et ça va faire mal. Évalué à 1.

    Ç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 :


    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.