Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QMYSQL驱动程序可用但未加载_Mysql_Qt_Qt5 - Fatal编程技术网

QMYSQL驱动程序可用但未加载

QMYSQL驱动程序可用但未加载,mysql,qt,qt5,Mysql,Qt,Qt5,如何在Qt中加载qmysql驱动程序?我有以下生成这些结果的代码: ("QSQLITE", "QMYSQL", "QMYSQL3") QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 有关于如何加载它的建议吗?您可以尝试使用strace诊断问题-似乎QMYSQL驱动程序可能需要一些运行时库依赖项才能工作。您可以使用QPluginLoader获得更好的错误

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

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

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

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

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

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

当时QtSDK附带的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();
我还发现了一条旧消息:

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"

好的,只需将
sqldrivers
文件夹复制到我的调试文件夹,它就成功了

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

我的答覆是:

QSqlDatabase db(QSqlDatabase::addDatabase("QMYSQL"));
db.setDatabaseName("dbname");
db.setHostName("localhost");
db.setUserName("usernm");
db.setPassword("password");

if (db.open())
{
    qDebug() << "SUCCESS!";
    db.close();
}
QSqlDatabase数据库(QSqlDatabase::addDatabase(“QMYSQL”);
db.setDatabaseName(“dbname”);
db.setHostName(“localhost”);
db.setUserName(“usernm”);
db.setPassword(“密码”);
if(db.open())
{

qDebug()我们应该先检查驱动程序

$ cd /opt/Qt5.2.1/5.2.1/gcc_64/plugins/sqldrivers
然后我们可以找到一些文件

使用下面的命令检查库

$ ldd libqsqlmysql.so
如果发现问题
libmysqlclient_r.so.16=>未找到
,则可能是库依赖性问题

在我在互联网上做了一些研究之后,有一种方法很简单

$ cd /usr/lib/x86_64-linux-gnu
如果您发现
libmysqlclient\r.so.18

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

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

  • 在基于Unix的系统上手动制作插件(来自Qt文档):

  • 这是一个专门针对这个问题编写的非常好的链接(别忘了从源代码处安装Qt,这可以通过在从.run可执行文件安装时在第一步中选中相应的(隐藏)框来完成,也可以通过下载“Qt everywhere opensource src”版本来完成):

  • 享受, 佩曼

    与我在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
    
    现在是我的工作了。
    所有最好的

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

    首先,检查是否存在
    libmysqlclient.so.18=>notfound
    的错误

        :~/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
    
    当时,这些问题都没有为我解决,我决定进一步查看synaptic软件包,并意识到
    libqt5sql5-mysql
    version 5.9.1没有安装,因此安装它解决了问题,但我在执行ldd时仍有一条消息

    ./libqsqlmysql.so:/usr/lib/x86_64-linux-gnu/libmysqlclient.so.18:找不到版本`libmysqlclient_18'(为./libqsqlmysql.so所需)

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

    我下载了第三个链接中所述的库,工作起来很有魅力。希望能有所帮助


    我在windows上…它是否可用?有一个很棒的工具称为Process Monitor(procmon)-它可以完成大致相同的任务。调试文件夹路径在哪里?我认为您应该创建一个软链接:ln-s libmysqlclient_r.so.18 libmysqlclient_r.so.16
        :/$ locate libmysqlclient 
    
        :/usr/lib/x86_64-linux-gnu$ sudo ln -s libmysqlclient.so.20 libmysqlclient.so.18
    
        ls -alh | grep libmysql