Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QMYSQL driver not loaded



  • Sto cergando di realizzare un progetto (Qt5.7 su Debian) che mi consenta di collegarmi ad un database MySQL. Quindi ho provveduto a seguire tutti i passi per avere il driver MySQL "funzionante" e alla fine sono riuscito a compilarlo dai sorgenti.

    Ciò nonostante quando cerco di eseguire l'esempio (o qualsiasi mio progetto anche più semplice) continuo a ricevere l'errore:

    QSqlDatabase: QMYSQL driver not loaded
    QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
    QSqlError("", "Driver not loaded", "Driver not loaded")
    Failed to connect.
    Press <RETURN> to close this window...
    

    Il file di progetto sqlbrowser.pro è così configurato (default):

    TEMPLATE        = app
    TARGET          = sqlbrowser
    
    QT              += sql widgets
    
    HEADERS         = browser.h connectionwidget.h qsqlconnectiondialog.h
    SOURCES         = main.cpp browser.cpp connectionwidget.cpp qsqlconnectiondialog.cpp
    
    FORMS           = browserwidget.ui qsqlconnectiondialog.ui
    build_all:!build_pass {
        CONFIG -= build_all
        CONFIG += release
    }
    
    # install
    target.path = $$[QT_INSTALL_EXAMPLES]/sql/sqlbrowser
    INSTALLS += target
    
    
    wince {
        DEPLOYMENT_PLUGIN += qsqlite
    }
    

    Da quello che ho letto nei forum dovrebbe essere ok!
    Ciò nonostante non riesco a capire come mai non "carica" il driver... se è perchè non lo trova o cos'altro. C'è qualche verifica che posso fare? Mi sto dimenticando di qualche cosa? ...magari nella configurazione del progetto!

    Ho provato anche creare una seconda macchina virtuale per fare un'in'installazione pulita ma arrivo sempre allo stesso punto. Con una ubuntu 16.04, mi blocco alla compilazione del driver dai sorgenti... e ho abbandonato l'esperimento.

    Grazie a chiunque riesca a darmi un input per superare questo rognoso ostacolo!



  • @morky76
    Ho scoperto il problema, ma non ho capito perchè!

    In pratica, l'unica "variante" rispetto all'installazione standard è che avevo cambiato il percorso dei progetti!!! Ripristinato il percorso originario dei progetti di QT creator... puf ...tutto ha iniziato a funzionare! Ma perchè? Qual'è il criterio/parametro attraverso il quale Qt carica il driver?





  • Anche se è un post molto vecchio, voglio comunque lasciare la mia esperienza qui, dato che mi sono imbattuto in questo problema recentemente e dopo vari tentativi ho trovato la soluzione che almeno per me ha funzionato. Ve la lascio qui.

    RISOLVERE SQL library not load su QT per MAC (dovrebbe valere anche per windows)

    Aggiungi la variabile QT_DEBUG_PLUGINS tra le variabili nel run environment (lo trovi aprendo un progetto, cliccando su projects a dx, poi su run e scendendo trovi il run environment) e settala a 1.
    Rilancia il programma.
    Il debug adesso darà in output una cosa del genere:

    QFactoryLoader::QFactoryLoader() checking directory path "/Users/Albo/Documents/progetto_malnati/server/build-server-Desktop_Qt_5_12_3_clang_64bit-Debug/KlapKlap_Server.app/Contents/MacOS/sqldrivers" ...
    Cannot load library /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib: (dlopen(/Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib, 133): Library not loaded: /opt/local/lib/mysql57/mysql/libmysqlclient.20.dylib
    Referenced from: /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib
    Reason: image not found)
    QLibraryPrivate::loadPlugin failed on "/Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib" : "Cannot load library /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib: (dlopen(/Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib, 133): Library not loaded: /opt/local/lib/mysql57/mysql/libmysqlclient.20.dylib\n Referenced from: /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib\n Reason: image not found)"

    Ora bisogna trovare i tre path che saranno gli argomenti del comando install_name_tool -change che daremo da terminale

    Il primo elemento è il path scritto nel debug dopo la scritta Library not loaded:
    Il secondo elemento è il path del file piu grande (le dimensioni le vedi con tasto destro ottieni informazioni) che trovi nel cercando libmysqlclient dal finder (se stai usando mac).
    Il terzo elemento è il path scritto nel debug dopo la scritta Cannot load library

    nel mio caso:

    primo elemento: /opt/local/lib/mysql57/mysql/libmysqlclient.20.dylib
    secondo elemento: /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib
    terzo elemento: /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib

    da cui:

    install_name_tool -change /opt/local/lib/mysql57/mysql/libmysqlclient.20.dylib /usr/local/mysql-8.0.19-macos10.15-x86_64/lib/libmysqlclient.21.dylib /Users/Albo/Qt/5.12.3/clang_64/plugins/sqldrivers/libqsqlmysql.dylib

    Ora basterà lanciare questo comando da terminale.
    Se riprovate a runnare il programma dovrebbe ora caricare correttamente le librerie.


Log in to reply