Qt中编译mysql驱动程序及解决 driver not loaded 错误
2014-01-07 11:51
573 查看
前一段时间又需要编译Qt的MySQL驱动,不过这次顺利的多,因为有过编译的经验,而且还找到了一篇步骤全面的文章,在此Mark一下以便以后需要。
一、开发环境:
操作系统:windows XP
Qt版本: 4.5
Qt安装目录:D:\devProgram\Qt
mysql版本: 4.1
mysql安装目录:D:\mysql41\lib\opt。(安装时选择了全部组件)
二、编译mysql驱动程序的过程:
1、用mingw-utils包中的reimp命令生成 libmysql.a 文件。
注:mingw-utils 下载地址:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,
下载后解压缩,reimp命令在bin目录里。
成生过程:
1)、进入mysql安装目录: cd D:\mysql41\lib\opt
2)、运行 reimp命令: reimp -d libmysql.lib
3)、运行dlltool命令:dlltool -k -d libmysql.def -l libmysql.a
2、编译mysql驱动:
1)、进入 qt 插件中的sqlsrivers目录:
cd D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql
2)、运行qmake命令:
qmake -o Makefile "INCLUDEPATH+=D:\mysql41\include" "LIBS+=D:\mysql41\lib\opt\libmysql.a" mysql.pro
3)、运行mingw32包里的 mingw32-make命令。(注不是make命令,也不是nmake命令。)
注:如果mingw32-make命令运行出错,请把mingw32\bin加到path 环境变量中。
4)、将生成的libqsqlmysqld4.a,qsqlmysqld4.dll 两个文件拷贝到 D:\devProgram\Qt\2009.03\qt\plugins\sqldrivers 目录下。
三、编写了一个简单的SQL程序:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("root");
bool ok = db.open();
std::cout << "db.open(): " << db.open() << std::endl;
}
运行时提示:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
说明mysql的驱动没有加载上。
四、解决办法:
将mysql的dll文件所在的目录加到环境变量PATH中:
Path= ...;D:\mysql41\lib\opt;
重新运行程序,提示:
db.open(): 1
说明数据库已经连上。
参考links:
http://www.qtcn.org/bbs/read.php?tid=4210
http://linux.chinaunix.net/techdoc/database/2008/08/19/1026089.shtml
http://kenby.javaeye.com/blog/422708
操作日志:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
D:\mysql41>cd D:\mysql41\lib\opt
D:\mysql41\lib\opt>D:\devProgram\Qt\mingw-utils-0.3\bin\reimp -d libmysql.lib
D:\mysql41\lib\opt>D:\devProgram\Qt\2009.03\mingw\bin\dlltool -k -d libmysql.def -l libmysql.a
D:\mysql41\lib\opt>cd D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>qmake -o Makefile "INCLUDEPATH+=D:\mysql41\include" "LIBS+=D:\mysql41\lib\opt\libmysql.a" mysql.pro
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>nmake
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
NMAKE -f Makefile.Debug
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LI
B -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\includ
e\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\main.o main.cpp
'g++' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: 'g++' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio\VC98\bin\NMAKE.EXE"' : return code '0x2'
Stop.
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>mingw32-make.exe
mingw32-make.exe -f Makefile.Debug
mingw32-make.exe[1]: Entering directory `D:/devProgram/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\main.o main.cpp
D:/devProgram/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LI
B -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\ActiveQt" -I
"debug" -I"..\..\..\..\mkspecs\default" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.cpp -o debug\qsql_mysql.moc
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\qsql_mysql.o ..\..\..\sql\drivers\mysql\qsql_mysql.cpp
In file included from ..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1476:
debug/qsql_mysql.moc:72:26: warning: no newline at end of file
D:/devProgram/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LI
B -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\ActiveQt" -I
"debug" -I"..\..\..\..\mkspecs\default" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.h -o debug\moc_qsql_mysql.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\moc_qsql_mysql.o debug\moc_qsql_mysql.cpp
windres -i qsqlmysqld_resource.rc -o debug\qsqlmysqld_resource_res.o --include-dir=.
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysqld4
.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o -L"d:\devProgram\Qt\2009.03\qt\lib" debug\qsqlmysqld_resource_res.o D:\mysql41\lib\opt\libmysql.a -lQtSq
ld4 -lQtCored4
Creating library file: debug\libqsqlmysqld4.a
mingw32-make.exe[1]: Leaving directory `D:/devProgram/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>
一、开发环境:
操作系统:windows XP
Qt版本: 4.5
Qt安装目录:D:\devProgram\Qt
mysql版本: 4.1
mysql安装目录:D:\mysql41\lib\opt。(安装时选择了全部组件)
二、编译mysql驱动程序的过程:
1、用mingw-utils包中的reimp命令生成 libmysql.a 文件。
注:mingw-utils 下载地址:http://www.qtcn.org/download/mingw-utils-0.3.tar.gz,
下载后解压缩,reimp命令在bin目录里。
成生过程:
1)、进入mysql安装目录: cd D:\mysql41\lib\opt
2)、运行 reimp命令: reimp -d libmysql.lib
3)、运行dlltool命令:dlltool -k -d libmysql.def -l libmysql.a
2、编译mysql驱动:
1)、进入 qt 插件中的sqlsrivers目录:
cd D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql
2)、运行qmake命令:
qmake -o Makefile "INCLUDEPATH+=D:\mysql41\include" "LIBS+=D:\mysql41\lib\opt\libmysql.a" mysql.pro
3)、运行mingw32包里的 mingw32-make命令。(注不是make命令,也不是nmake命令。)
注:如果mingw32-make命令运行出错,请把mingw32\bin加到path 环境变量中。
4)、将生成的libqsqlmysqld4.a,qsqlmysqld4.dll 两个文件拷贝到 D:\devProgram\Qt\2009.03\qt\plugins\sqldrivers 目录下。
三、编写了一个简单的SQL程序:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("test");
db.setUserName("root");
db.setPassword("root");
bool ok = db.open();
std::cout << "db.open(): " << db.open() << std::endl;
}
运行时提示:
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QODBC3 QODBC
说明mysql的驱动没有加载上。
四、解决办法:
将mysql的dll文件所在的目录加到环境变量PATH中:
Path= ...;D:\mysql41\lib\opt;
重新运行程序,提示:
db.open(): 1
说明数据库已经连上。
参考links:
http://www.qtcn.org/bbs/read.php?tid=4210
http://linux.chinaunix.net/techdoc/database/2008/08/19/1026089.shtml
http://kenby.javaeye.com/blog/422708
操作日志:
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
D:\mysql41>cd D:\mysql41\lib\opt
D:\mysql41\lib\opt>D:\devProgram\Qt\mingw-utils-0.3\bin\reimp -d libmysql.lib
D:\mysql41\lib\opt>D:\devProgram\Qt\2009.03\mingw\bin\dlltool -k -d libmysql.def -l libmysql.a
D:\mysql41\lib\opt>cd D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>qmake -o Makefile "INCLUDEPATH+=D:\mysql41\include" "LIBS+=D:\mysql41\lib\opt\libmysql.a" mysql.pro
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>nmake
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
NMAKE -f Makefile.Debug
Microsoft (R) Program Maintenance Utility Version 6.00.8168.0
Copyright (C) Microsoft Corp 1988-1998. All rights reserved.
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LI
B -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\includ
e\ActiveQt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\main.o main.cpp
'g++' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
NMAKE : fatal error U1077: 'g++' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio\VC98\bin\NMAKE.EXE"' : return code '0x2'
Stop.
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>mingw32-make.exe
mingw32-make.exe -f Makefile.Debug
mingw32-make.exe[1]: Entering directory `D:/devProgram/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\main.o main.cpp
D:/devProgram/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LI
B -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\ActiveQt" -I
"debug" -I"..\..\..\..\mkspecs\default" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.cpp -o debug\qsql_mysql.moc
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\qsql_mysql.o ..\..\..\sql\drivers\mysql\qsql_mysql.cpp
In file included from ..\..\..\sql\drivers\mysql\qsql_mysql.cpp:1476:
debug/qsql_mysql.moc:72:26: warning: no newline at end of file
D:/devProgram/Qt/2009.03/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LI
B -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\ActiveQt" -I
"debug" -I"..\..\..\..\mkspecs\default" -D__GNUC__ -DWIN32 ..\..\..\sql\drivers\mysql\qsql_mysql.h -o debug\moc_qsql_mysql.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_DLL -DQT_PLUGIN -DQT_SQL_LIB -DQT_C
ORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtSql" -I"..\..\..\..\include" -I"d:\mysql41\include" -I"..\..\..\..\include\Active
Qt" -I"debug" -I"..\..\..\..\mkspecs\default" -o debug\moc_qsql_mysql.o debug\moc_qsql_mysql.cpp
windres -i qsqlmysqld_resource.rc -o debug\qsqlmysqld_resource_res.o --include-dir=.
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -shared -Wl,--out-implib,debug\libqsqlmysqld4.a -o debug\qsqlmysqld4
.dll debug/main.o debug/qsql_mysql.o debug/moc_qsql_mysql.o -L"d:\devProgram\Qt\2009.03\qt\lib" debug\qsqlmysqld_resource_res.o D:\mysql41\lib\opt\libmysql.a -lQtSq
ld4 -lQtCored4
Creating library file: debug\libqsqlmysqld4.a
mingw32-make.exe[1]: Leaving directory `D:/devProgram/Qt/2009.03/qt/src/plugins/sqldrivers/mysql'
D:\devProgram\Qt\2009.03\qt\src\plugins\sqldrivers\mysql>
相关文章推荐
- 编译Qt的mysql驱动及解决 driver not loaded 错误
- Qt5.9连接MySql5.7.17错误解决办法(错误提示:QMYSQL driver not loaded)
- qt4:mysql驱动程序 driver not loaded
- Qt出现“QSqlDatabase: QMYSQL driver not loaded”和“启动程序失败,路径或者权限错误”解决方法
- qt4:windows下编译qt4的mysql5驱动程序的错误解决
- QMYSQL driver not loaded 的原理和解决办法
- 编译Mysql时configure: error: No curses/termcap library found 的错误解决方法
- Qt5 编译错误找不到头文件的解决方法
- QT使用MySql的配置(使用addLibraryPath载入插件),编译QT的MySql驱动问题及解决方案(自己使用libmysql.lib进行编译mysql.pro,万不得已可以查看Makefile.Debug以解决问题)
- 编译Qt“NMAKE:fatal error U1077”错误的解决方法
- 编译Mysql时configure: error: No curses/termcap library found 的错误解决方法
- qt编译错误解决(一)
- C# 未能加载文件或程序集“MySQLDriverCS..." 错误解决
- 两个常见Qt编译错误的解决
- WDK7编译WDF相关的驱动程序错误解决办法
- ubuntu上 QT 连接各种数据库报错解决(QSqlDatabase: * driver not loaded )
- 编译Mysql时configure: error: No curses/termcap library found 的错误解决方法
- 编译安装php及编译安装mysql常见错误总结及解决办法
- QMYSQL driver not loaded 的原理和解决办法
- java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver错误在eclipse中的解决方法