2

我用 -plugin-sql-mysql -plugin-sql-sqlite 标志构建了 qt。我有 libqsqlmysql.a 和 libqsqlite.a。我在我的项目中使用 qt。但是我的构建系统不是qt,我用的是waf。

当我尝试运行与 mysql 数据库建立连接的应用程序时遇到以下问题:

QSqlDatabase: QMYSQL driver not loaded                                                    
QSqlDatabase: available drivers:                                                          
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins      
INFO - Failed to connect to root mysql admin   

我在构建应用程序时将 -lqsqlmysql 添加到编译器选项中。

您能否解释一下 qt 驱动程序是如何工作的,它如何以及何时尝试加载驱动程序。什么是 qt 驱动程序(dll、lib、....)?

4

2 回答 2

3

我认为您的应用程序正在尝试从 DLL 动态加载数据库插件。本文档将帮助您找到数据库驱动程序 DLL 的适当位置。或者,您可以将您的应用与插件静态链接,方法如下。

于 2012-11-09T21:06:08.370 回答
2

Qt 有多种类型数据库的插件,这些插件位于以下位置:

$(QTDIR)/plugins/sqldrivers

首先检查那里是否存在mysql插件。如果没有插件,则意味着您没有正确编译 Qt,因此您应该使用启用的 MySql 插件重新编译 Qt。否则您的应用程序可能无法正确加载 mysql 插件。Qt 插件在应用程序初始化期间动态加载,即在初始化 QSqlDatabase 对象时。如果插件位置设置不正确,则不会加载任何插件。您可以通过以下 Qt API 检查应用程序期望找到插件的位置:

QStringList QCoreApplication::libraryPaths ()

如果应用程序没有指向正确的位置,您可以通过调用以下方法设置插件路径:

void QCoreApplication::addLibraryPath ( const QString & path )

  或者通过在放置可执行文件的文件夹中创建 qt.conf 文件。在此文件中,您可以通过以下方式配置插件位置:

[Paths]
Plugins = %pluginlocation%
于 2012-11-09T22:42:25.220 回答