找到但未加载的 MYSQL 驱动程序

Posted

技术标签:

【中文标题】找到但未加载的 MYSQL 驱动程序【英文标题】:MYSQL driver found but not loaded 【发布时间】:2014-06-07 18:06:06 【问题描述】:

QSqlDatabase:QMYSQL驱动未加载

QSqlDatabase:可用驱动程序:QSQLITE QMYSQL Qmysql3 QODBC QODBC3 QPSQL QPSQL7

这是我尝试使用 QSqlDatabase 做任何事情时得到的结果。当我使用 Linux 时,我没有遇到这样的问题,但现在我需要将我的应用程序移植到 Windows 并且发生了这个问题。我知道如果找不到驱动程序 - 我需要构建它。但它被发现所以经过一番搜索后我发现我需要 32 位 libmysql.dll 文件 - 我已经有了。我正在尝试将它添加到我的项目中:

INCLUDEPATH += C:\\Program Files (x86)\\MySQL\\MySQL Server 5.6\\lib
DEPENDPATH += C:\\Program Files (x86)\\MySQL\\MySQL Server 5.6\\lib

或类似:

LIBS += -L"C:\\Program Files (x86)\\MySQL\\MySQL Server 5.6\\lib" -libmysql

但第一种方法没有给我任何输出(我什至不确定语法),第二种方法返回错误:

:-1: 错误:找不到-libmysql

collect2.exe:-1: 错误:错误:ld 返回 1 个退出状态

我可以让它工作的唯一方法是将 libmysql.dll 复制到我的应用程序的调试文件夹中,但由于 LGPL 我不能这样做,对吧?

【问题讨论】:

LGPL 确实允许您将 DLL 放在调试文件夹中。为什么不呢? @user3564091 最终用户需要能够升级您的应用程序正在使用的受 LGPL 保护的软件。例如。如果您正在制作使用 GTK 的非 LGPL 应用程序 - 用户有权升级 GTK,即使它会破坏您的应用程序。 而将 DLL 放入应用程序的文件夹中会如何破坏此规则?只要您使用的 LGPL 库是一个单独的 DLL,用户可以随时替换它。 @user3564091 (1) 对于单个 libmysql.dll 来说可能不是问题,但是复制您正在使用的所有内容都是错误的,在 Linux 上我不需要这样做并且 (2) 问题是差不多就是这样:如何在 Qt 项目中使用系统库?现在,我正在按照你说的做,但想象一下这种情况:MySQL 服务器升级,我有旧的 libmysql.dll 文件,应用程序停止工作,即使它可以通过简单地更新文件来工作......使用共享是明智的图书馆因为某种原因在那里,对吧?我不想教我所有的用户如何替换库... 您不必教他们如何手动替换 dll - 您可以在更新中发布该特定 dll 的较新版本,并将它们包装在安装程序中或类似的东西中。但我同意这是一种解决方法。顺便说一句:您在 INCLUDEPATH 中犯了一个错误,因为包含文件位于“include”目录中,而不是您所写的“lib”中。您使用哪个 Qt 版本? 【参考方案1】:

mysql page 建议应该使用“-lmysqlclient”而不是-lmysql 进行链接。

“在 Windows 上,您可以将代码与动态或静态 C 客户端库链接。静态库名为 mysqlclient.lib,动态库名为 libmysql.dll。此外,libmysql.lib使用动态库需要静态导入库。”

还要注意单线程/多线程问题。

【讨论】:

以上是关于找到但未加载的 MYSQL 驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

模块“.dll”已加载,但未找到入口点

页面加载但未显示从数据库请求的内容

Qt 驱动程序 Postgresql 可用但未加载

IOKit驱动程序已加载但未启动

在 src 属性上找到但未加载的图像

Crashlytics 使 TestFlight 应用程序崩溃,但未找到任何崩溃日志