找回密码
 立即注册
收起左侧

Qt编译Mysql驱动隐式调用dll,编译报错

6
回复
10948
查看
[复制链接]
累计签到:29 天
连续签到:1 天
来源: 2013-12-18 15:11:10 显示全部楼层 |阅读模式
1Qter豆
我在使用Qt5.2编译Mysql驱动插件时,调用Mysql的dll时一直没有成功,编译总是报错,报错的内容都是头文件里定义的函数没有被定义。这是什么原因呢?那位大神帮忙看下,谢谢!!

最佳答案

查看完整内容

mysql版本的问题? http://stackoverflow.com/questions/9880614/compiling-mysql-driver-for-qt-4-8-0-in-windows-7-64-bit
回复

使用道具 举报

累计签到:6 天
连续签到:1 天
2013-12-18 15:11:11 显示全部楼层
回复

使用道具 举报

尚未签到

2013-12-18 15:40:42 显示全部楼层
把报错内容贴出来吧

点评

已经发了,主要是报dll中的函数没有声明定义,但是这种隐式调用,只要有对应的头文件和lib库就应该可以了,而我的lib库加载应该是正确的,纠结  发表于 2013-12-18 16:55
回复

使用道具 举报

累计签到:29 天
连续签到:1 天
2013-12-18 16:52:48 显示全部楼层
I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0\QtCore" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore" -I".moc\debug" -I"." -I"..\..\..\..\mkspecs\win32-g++" -o .obj\debug\qsql_mysql.o ..\..\..\sql\drivers\mysql\qsql_mysql.cpp
C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin\moc.exe -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -D__GNUC__ -DWIN32 -I..\mysql -I"C:\MySql\include" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0\QtCore" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore" -I".moc\debug" -I"." -I"..\..\..\..\mkspecs\win32-g++" ..\..\..\sql\drivers\mysql\qsql_mysql_p.h -o .moc\debug\moc_qsql_mysql_p.cpp
g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -fno-exceptions -frtti -Wall -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_NO_EXCEPTIONS -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I..\mysql -I"C:\MySql\include" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore\5.2.0\QtCore" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtCore" -I".moc\debug" -I"." -I"..\..\..\..\mkspecs\win32-g++" -o .obj\debug\moc_qsql_mysql_p.o .moc\debug\moc_qsql_mysql_p.cpp
g++ -shared -Wl,--out-implib,\plugins\sqldrivers\libqsqlmysqld.a -o \plugins\sqldrivers\qsqlmysqld.dll .obj/debug/main.o .obj/debug/qsql_mysql.o .obj/debug/moc_qsql_mysql_p.o  -LC:/MySql/lib/ -llibmysql -LC:\Qt\Qt5.2.0\5.2.0\mingw48_32\lib -lQt5Sqld -lQt5Cored
.obj/debug/qsql_mysql.o: In function `codec':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:223: undefined reference to `mysql_character_set_name@4'
.obj/debug/qsql_mysql.o: In function `qMakeError':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:362: undefined reference to `mysql_num_fields@4'
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:369: undefined reference to `mysql_fetch_field@4'
.obj/debug/qsql_mysql.o: In function `ZN12QMYSQLResult7cleanupEv':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1355: undefined reference to `mysql_get_server_version@4'
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1428: undefined reference to `mysql_list_fields@12'
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1434: undefined reference to `mysql_fetch_field@4'
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1436: undefined reference to `mysql_free_result@4'
.obj/debug/qsql_mysql.o: In function `ZN12QMYSQLDriver16beginTransactionEv':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1456: undefined reference to `mysql_query@8'
.obj/debug/qsql_mysql.o: In function `ZN12QMYSQLDriver17commitTransactionEv':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1492: undefined reference to `mysql_query@8'
.obj/debug/qsql_mysql.o: In function `ZNK12QMYSQLDriver11formatValueERK9QSqlFieldb':
C:\Qt\Qt5.2.0\Sources\qtbase\src\plugins\sqldrivers\build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug/../../../sql/drivers/mysql/qsql_mysql.cpp:1519: undefined reference to `mysql_real_escape_string@16'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: Leaving directory 'C:/Qt/Qt5.2.0/Sources/qtbase/src/plugins/sqldrivers/build-mysql-Desktop_Qt_5_2_0_MinGW_32bit-Debug'
makefile:38: recipe for target 'debug-all' failed
mingw32-make[1]: *** [\plugins\sqldrivers\qsqlmysqld.dll] Error 1
mingw32-make: *** [debug-all] Error 2
16:38:20: 进程"C:\Qt\Qt5.2.0\Tools\mingw48_32\bin\mingw32-make.exe"退出,退出代码 2 。
Error while building/deploying project mysql (kit: Desktop Qt 5.2.0 MinGW 32bit)
回复

使用道具 举报

尚未签到

2013-12-18 17:45:51 显示全部楼层
xueqiang508 发表于 2013-12-18 16:52
I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSql\5.2.0" -I"C:\Qt\Qt5.2.0\5.2.0\mingw48_32\include\QtSq ...

你这报错是挺奇怪的。。。我也不懂。。孤陋寡闻了
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-12-19 11:42:33 显示全部楼层
我是这样来编译的...

libmySQL.dll 放入 QT bin目录下

先找到QT目录下 mysql.pro 文件
E:/softinstallDir/qt/qt4.8.5/src/plugins/sqldrivers/mysql/mysql.pro
编辑 pro文件  在第二行 插入

INCLUDEPATH += "mysql的include路径"
LIBS += "mysql的libmysql.lib路径"
比如:
INCLUDEPATH += "e:/softinstallDir/mysql/include/"
LIBS += "E:/softInstallDir/mysql/lib/libmysql.lib"

编译 生成 4个文件,
qsqlmysql4.dll  和 libqsqlmysql4.lib
qsqlmysqld4.dll 和 libqsqlmysqld4.lib
把这4个文件拷贝到 qt下的 plugins\sqldrivers 目录里。

回复

使用道具 举报

累计签到:29 天
连续签到:1 天
2013-12-19 13:49:48 显示全部楼层
KaoN 发表于 2013-12-18 15:11
mysql版本的问题?
http://stackoverflow.com/questions/9880614/compiling-mysql-driver-for-qt-4-8-0-in- ...

问题解决,是版本问题,需要32位MySql
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了