Qt项目不提供MySQL database drivers for the Qt SQL module,因此必须使用ODBC或compile the plugin manually。
我正在尝试后者。
我一直在VS 2010中使用预构建的Qt 4.8.1,但是在“ 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开源进行静态链接)。
最佳答案
我走错了路!
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项目目录根目录中。
关于mysql - 使用Visual Studio 2010 C++在Windows上编译用于Qt 4.8.1的MySQL插件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18445223/