Planned maintenance has been done but it did not solve the problem. So work will continue on this and a new time for trying updates will be announced asap.

Programme QT ne reconnait les drivers MYSQL



  • Bonjour,

    Je reprends le travail d'un ancien salarié de ma boite. L'ancien salarié a créer un OS grâce à Yocto pour un ARM.
    Sur cet OS, il y a QT5.6.3 d'installé. Le programme QT est compilé sur un PC avec le SDK adéquat. Le fichier binaire de Qt après un qmake et un make est exécuté sur l'ARM.

    #include <QtSql>
    #include <QSqlDatabase>
    #include <QDebug>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        qDebug() << QSqlDatabase::drivers();
    }
    

    Lorsque j’exécute ce code sur le PC j'ai : ("QSQLITE", "QMYSQL", "QMYSQL3", "QODBC", "QODBC3", "QPSQL", "QPSQL7")
    Mais lorsque je l'exécute sur l'ARM je n'ai rien : ()

    Sur l'ARM, dans mon /usr/lib/qt5/plugins j'ai :

    audio                  iconengines            platforminputcontexts  playlistformats        xcbglintegrations
    bearer                 imageformats           platforms              qmltooling
    generic                mediaservice           platformthemes
    

    Et même si je rajoute la librairie sqldrivers avec les fichierslibqsqlite.so libqsqlmysql.so libqsqlodbc.so libqsqlpsql.so

    audio                  iconengines            platforminputcontexts  playlistformats        xcbglintegrations
    bearer                 imageformats           platforms              qmltooling
    generic                mediaservice           platformthemes         sqldrivers
    

    Le programme fait la même chose.

    Merci par avance.



  • @nikoPol Bonjour, une première chose serait de vérifier que l'installation de Qt a été faite avec les plugins SQL et qu'il est possible de les charger.

    Pour cela, il faut lancer le programme avec QT_DEBUG_PLUGINS=1.
    Par exemple, si le programme se nomme sqltest : QT_DEBUG_PLUGINS=1 ./sqltest

    De cette façon, le framework Qt va écrire sur la sortie standard tout ce qu'il est capable de trouver et charger comme plugin.



  • Bonjour,

    Tout d'abord merci de votre réponse.

    J'obtiens :

    root@machine-am335x-evmsk:~# QT_DEBUG_PLUGINS=1 ./Projet
    
    QFactoryLoader::QFactoryLoader() checking directory path "/usr/lib/qt5/plugins/sqldrivers" ...
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/sqldrivers/libqsqlite.so"
    QElfParser: '/usr/lib/qt5/plugins/sqldrivers/libqsqlite.so' is an invalid ELF object (wrong cpu architecture)
    "'/usr/lib/qt5/plugins/sqldrivers/libqsqlite.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/sqldrivers/libqsqlmysql.so"
    QElfParser: '/usr/lib/qt5/plugins/sqldrivers/libqsqlmysql.so' is an invalid ELF object (wrong cpu architecture)
    "'/usr/lib/qt5/plugins/sqldrivers/libqsqlmysql.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/sqldrivers/libqsqlodbc.so"
    QElfParser: '/usr/lib/qt5/plugins/sqldrivers/libqsqlodbc.so' is an invalid ELF object (wrong cpu architecture)
    "'/usr/lib/qt5/plugins/sqldrivers/libqsqlodbc.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/usr/lib/qt5/plugins/sqldrivers/libqsqlpsql.so"
    QElfParser: '/usr/lib/qt5/plugins/sqldrivers/libqsqlpsql.so' is an invalid ELF object (wrong cpu architecture)
    "'/usr/lib/qt5/plugins/sqldrivers/libqsqlpsql.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() checking directory path "/home/root/sqldrivers" ...
    QFactoryLoader::QFactoryLoader() looking at "/home/root/sqldrivers/libqsqlite.so"
    QElfParser: '/home/root/sqldrivers/libqsqlite.so' is an invalid ELF object (wrong cpu architecture)
    "'/home/root/sqldrivers/libqsqlite.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/home/root/sqldrivers/libqsqlmysql.so"
    QElfParser: '/home/root/sqldrivers/libqsqlmysql.so' is an invalid ELF object (wrong cpu architecture)
    "'/home/root/sqldrivers/libqsqlmysql.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/home/root/sqldrivers/libqsqlodbc.so"
    QElfParser: '/home/root/sqldrivers/libqsqlodbc.so' is an invalid ELF object (wrong cpu architecture)
    "'/home/root/sqldrivers/libqsqlodbc.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    QFactoryLoader::QFactoryLoader() looking at "/home/root/sqldrivers/libqsqlpsql.so"
    QElfParser: '/home/root/sqldrivers/libqsqlpsql.so' is an invalid ELF object (wrong cpu architecture)
    "'/home/root/sqldrivers/libqsqlpsql.so' is an invalid ELF object (wrong cpu architecture)"
             not a plugin
    ()
    

    Que faire ?



  • @nikoPol Bonjour, c'est pourtant simple, vous avez installé des plugins qui sont pas les bons... Je pense que vous avez copié les plugins de votre station de travail (certainement x86) sur votre cible (qui est un processeur ARM).

    Il vous faut compiler les plugins SQL pour votre cible, donc mettre à jour votre image Yocto et installer la nouvelle image sur votre cible.



  • Ok, je vous remercie.
    Il n'y a pas d'autre moyen d'avoir les librairies dans le format nécessaire : ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV) ?



  • @nikoPol said in Programme QT ne reconnait les drivers MYSQL:

    Il n'y a pas d'autre moyen

    Non, il faut compiler les drivers pour votre cible avec les paramètres adéquats, soit directement à partir de Yocto, soit "à la main", à partir des sources de Qt.

    Peut-être que ce lien pourra vous être utile: https://www.udoo.org/forum/threads/solved-how-to-use-sql-model-with-qt5-layer.5136/

    Désolé, je n'ai que des connaissances de base concernant Yocto... Et ca fait bien 3 ans que je ne l'ai plus mis en oeuvre!