Qt项目不提供MySQL database drivers for the Qt SQL module,因此必须使用ODBC或compile the plugin manually。 我正在尝试后者。 我一直在使用预构建的Qt 4.8.1和VS 2010,但未能在“C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/”中找到插件的项目文件(mysql.pro)正如众多教程一样。有qsql_mysql.pri,其中包含以下内容:
HEADERS += $$PWD/qsql_mysql.h
SOURCES += $$PWD/qsql_mysql.cpp
# modified! I added these:
#INCLUDEPATH += "C:/Program Files (x86)/MySQL/MySQL Server 5.6/include"
#LIBS += "C:/Program Files (x86)/MySQL/MySQL Server 5.6/lib/libmysql.lib"
unix {
isEmpty(QT_LFLAGS_MYSQL) {
!contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) {
use_libmysqlclient_r:LIBS += -lmysqlclient_r
else:LIBS += -lmysqlclient
}
} else {
LIBS *= $$QT_LFLAGS_MYSQL
QMAKE_CXXFLAGS *= $$QT_CFLAGS_MYSQL
}
} else {
!contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*):LIBS += -llibmysql
}
构建它会导致以下错误:
release\moc_qsql_mysql.cpp(45) : warning C4273: 'QMYSQLDriver::qt_static_metacall': Inconsistent DLL-binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'qt_static_metacall'
release\moc_qsql_mysql.cpp(57) : warning C4273: 'staticMetaObjectExtraData': Inconsistent DLL-Binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'private: static QMetaObjectExtraData const QMYSQLDriver::staticMetaObjectExtraData'
release\moc_qsql_mysql.cpp(57) : error C2491: 'QMYSQLDriver::staticMetaObjectExtraData': Definition of static member for dllimport not valid
release\moc_qsql_mysql.cpp(61) : warning C4273: 'staticMetaObject': Inconsistent DLL-binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'public: static QMetaObject const QMYSQLDriver::staticMetaObject'
release\moc_qsql_mysql.cpp(61) : error C2491: 'QMYSQLDriver::staticMetaObject': Definition of static member for dllimport not valid
release\moc_qsql_mysql.cpp(71) : warning C4273: 'QMYSQLDriver::metaObject': Inconsistent DLL-binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'metaObject'
release\moc_qsql_mysql.cpp(76) : warning C4273: 'QMYSQLDriver::qt_metacast': Inconsistent DLL-binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'qt_metacast'
release\moc_qsql_mysql.cpp(84) : warning C4273: 'QMYSQLDriver::qt_metacall': Inconsistent DLL-binding.
C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h(104): See previous definition of 'qt_metacall'
c:\QtSDK\QtSources\4.8.1\src\sql\drivers\mysql\qsql_mysql.cpp(47) : fatal error C1083: File (Include) could not be opened: "qsqlerror.h": No such file or directory
当我尝试手动制作的几乎完全相同的mysql.pro时,也会发生这种情况:
LIBS += "C:/Program Files (x86)/MySQL/MySQL Server 5.6/lib/libmysql.lib"
INCLUDEPATH += "C:/Program Files (x86)/MySQL/MySQL Server 5.6/include/"
SOURCES += "C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.cpp"
HEADERS += "C:/QtSDK/QtSources/4.8.1/src/sql/drivers/mysql/qsql_mysql.h"
This可能是更接近原始版本的版本。
关于此方法许可的另一个问题:使用Qt源构建此插件是否需要发布使用的源和/或使用该模块作为动态库存在限制(不允许与Qt开源的商业用途的静态链接)。
答案 0 :(得分:0)
我走错了路! mysql.pro文件存在于C:\ QtSDK \ QtSources \ 4.8.1 \ src \ plugins \ sqldrivers \ mysql
中TARGET = qsqlmysql
# added these two lines after copying from
# C:\Program Files (x86)\MySQL\MySQL Server 5.6
LIBS += lib/libmysql.lib
INCLUDEPATH += include/
SOURCES = main.cpp
include(../../../sql/drivers/mysql/qsql_mysql.pri)
include(../qsqldriverbase.pri)
现在我可以构建插件了。 我将文件复制到C:\ QtSDK \ Desktop \ Qt \ 4.8.1 \ msvc2010 \ plugins \ sqldrivers
使用
运行MySQL作为管理员"C:\Program Files (x86)\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.6\my.ini"
但即使我将DLL复制到Qt的插件目录
C:\QtSDK\Desktop\Qt\4.8.1\msvc2010\plugins\sqldrivers
找不到他们:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
QSqlError(-1, "Driver not loaded", "Driver not loaded")
此答案Qt 4.8.0 - MySQL Driver not listed有解决方案:
要使用它,请确保您拥有找到的路径 libmysql.dll(通常是C:\ mysql \ bin)作为环境的一部分 变量PATH。
或者只是将DLL复制到Qt项目目录根目录中。