【问题标题】:QMYSQL driver available but not loadedQMYSQL 驱动程序可用但未加载
【发布时间】:2013-02-02 23:41:52
【问题描述】:

如何在 Qt 中加载 qmysql 驱动程序?我有以下产生这些结果的代码:

("QSQLITE", "QMYSQL", "QMYSQL3") 
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3

关于如何加载它有什么建议吗?

【问题讨论】:

    标签: mysql qt qt5


    【解决方案1】:

    我们应该先检查我们的驱动程序

    $ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers
    

    然后我们可以找到一些文件

    使用以下命令检查库

    $ ldd libqsqlmysql.so
    

    如果你发现问题libmysqlclient_r.so.16 => not found 可能是库依赖问题。

    我在网上做了一点研究,有一个方法很简单。

    $ cd /usr/lib/x86_64-linux-gnu
    

    如果你找到libmysqlclient_r.so.18

    $ cp libmysqlclient_r.so.18 libmysqlclient_r.so.16
    

    【讨论】:

    • 我认为你应该做一个软链接:ln -s libmysqlclient_r.so.18 libmysqlclient_r.so.16
    【解决方案2】:

    好的,只需将sqldrivers 文件夹复制到我的调试文件夹就可以了!

    【讨论】:

    • 你的调试文件夹路径在哪里?
    【解决方案3】:

    您可以尝试使用 strace 诊断问题 - 似乎 QMYSQL 驱动程序可能需要一些运行时库依赖项才能工作。

    【讨论】:

    • 我在windows上...可以用吗?
    • 有一个很棒的工具叫做 Process Monitor (procmon) - 它的任务大致相同。
    【解决方案4】:

    在 Windows 上(参见目录结构):

    the_qt_app.exe
    libmysql.dll
    sqldrivers/qsqlmysql4.dll
    

    【讨论】:

      【解决方案5】:

      您可以使用QPluginLoader 获得更好的错误消息。

      当我遇到与 MySQL 驱动程序相同的问题时,消息类似于“该版本是使用此 Qt 版本以外的其他选项编译的”。

      当时与 Qt SDK 一起提供的 Qt 源似乎与其二进制文件不兼容。

      下载Qt源码并编译我自己的Qt版本和MySQL驱动后,问题就消失了。

      编辑:一些示例代码。

      QPluginLoader loader;
      loader.setFileName("/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib");
      qDebug() << loader.load();
      qDebug() << loader.errorString();
      
      loader.setFileName("/Users/niklaswulf/QtSDK/Qt/5.0.1/5.0.1/clang_64/plugins/sqldrivers/libqsqlite_debug.dylib");
      qDebug() << loader.load();
      qDebug() << loader.errorString();
      

      针对 5.0.1 进行编译时,输出如下:

      false 
      "The file '/Users/niklaswulf/QtSDK/Qt/4.8.4/plugins/sqldrivers/libqsqlite_debug.dylib' is not a valid Qt plugin." 
      true 
      "Unknown error"
      

      我也找到了旧消息:

      The plugin '/path/to/some/libqsqlmysql.dylib' uses incompatible Qt library. Expected build key "macosx macx-cocoa g++-4 full-config", got "macosx macx-cocoa g++-4 no-pkg-config"
      

      【讨论】:

        【解决方案6】:
        QSqlDatabase: QMYSQL driver not loaded
        QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3
        

        我在使用 Qt-5.2.0 的 fedora20(64 位)中遇到了同样的问题,然后按照以下步骤操作:

        $ cd /opt/Qt5.2.0/5.2.0/gcc_64/plugins/sqldrivers
        $ ls
        libqsqlite.so  libqsqlmysql.so
        

        使用以下命令检查库依赖:

        $ ldd libqsqlmysql.so
        

        我发现了问题:

        libmysqlclient_r.so.16 => not found 
        

        可能是库依赖问题。所以解决这个问题:

        库文件的链接:

         $ ln -s libmysqlclient_r.so.16.0.0        libmysqlclient_r.so
        

        又一次:

        $ ln -s libmysqlclient_r.so.16.0.0         libmysqlclient_r.so.16
        

        现在它为我工作。 万事如意

        【讨论】:

          【解决方案7】:

          遇到了同样的问题,谷歌的一些研究和直觉终于解决了它。 使用 Qt5.9.1 和 Ubuntu 17.10

          首先检查libmysqlclient.so.18 =&gt; not found的错误是否存在

              :~/Qt5.9.1/5.9.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
          

          二、搜索libmysqlclient在哪里

              :/$ locate libmysqlclient 
          

          第三,进入 libmysqlclient 所在的文件夹,并在那里建立链接

              :/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18
          

          并检查之前制作的链接

              ls -alh | grep libmysql
          

          在那一刻,这些都没有为我解决,我决定进一步查看突触包,并意识到libqt5sql5-mysql 5.9.1 版没有安装,所以安装它解决了问题,但我仍然有一条消息做ldd时

          ./libqsqlmysql.so: /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18: 找不到版本“libmysqlclient_18”(./libqsqlmysql.so 需要)

          在那之后,找到了一些可以引导我找到真正解决方案的链接,如果你想知道发生了什么,这里就是它们

          我下载了第三个链接中所述的库,并像魅力一样工作。希望有帮助!

          https://www.unix.com/unix-for-advanced-and-expert-users/107611-difference-between-libsqlclient-so-libsqlclient_r-so.html

          http://www.tango-controls.org/community/forum/c/general/installation/ubuntu-1604-problem-installing-from-source-code-libmysqlclient-replaces-libmysqlclient_r/

          https://superuser.com/questions/1101426/installing-libmysqlclient18-on-ubuntu-16-04?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa&newreg=9c558283c488461aaf597ef1132e4ca0

          【讨论】:

            【解决方案8】:

            这里有几个关于这个问题的非常好的链接:

            1. 在基于 Unix 的系统上手动制作插件(来自 Qt 文档): http://qt-project.org/doc/qt-5/sql-driver.html

            2. 一个写得很好的链接,专门针对这个问题(不要忘记从源代码安装 Qt,这可以通过在从 .run 安装时在第一步中选中相应的(隐藏)框来完成可执行文件或通过下载“qt-everywhere-opensource-src”版本): http://adamcavendish.is-programmer.com/posts/40431.html

            享受, 佩曼

            【讨论】:

              【解决方案9】:

              我的回答:

              QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
              db.setDatabaseName("dbname");
              db.setHostName("localhost");
              db.setUserName("usernm");
              db.setPassword("password");
              
              if (db.open())
              {
                  qDebug() << "SUCCESS!";
                  db.close();
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-08-02
                • 1970-01-01
                • 1970-01-01
                • 2022-12-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多