使用Visual Studio 2010 C+;在Windows上编译Qt 4.8.1的MySQL插件+;

使用Visual Studio 2010 C+;在Windows上编译Qt 4.8.1的MySQL插件+;,mysql,qt,plugins,Mysql,Qt,Plugins,Qt项目不提供MySQL,因此必须使用ODBC或。 我在试后者。 我一直在VS2010中使用预构建的Qt4.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

Qt项目不提供MySQL,因此必须使用ODBC或。 我在试后者。 我一直在VS2010中使用预构建的Qt4.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"
可能是更接近原始版本的版本

另一个关于此方法许可的问题:使用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") 
这个答案有一个解决方案:

要使用它,只需确保你有你找到的路径 libmysql.dll(通常为C:\mysql\bin)作为环境的一部分 可变路径


或者只是将DLL复制到Qt项目目录根目录中。

看起来我走错了路径!请参阅C:\QtSDK\QtSources\4.8.1\src\plugins\sqldrivers\mysql