qt5应用程序打包发布和qt5的mysql驱动编译

1.mysql的开发支持库libmysql.dll,我是从安装的mysql中的bin目录下拷贝出来的,
需要将此文件拷贝到Qt\Qt5.10.0\5.10.0\mingw53_32\bin目录下,
要不然程序编译完成运行时也会报错Driver not load.Driver not load.
2.查看Qt\Qt5.10.0\5.10.0\mingw53_32\plugins\sqldrivers目录下有没有
qsqlmysql.dll和qsqlmysqld.dll两个动态库文件,如果没有需要编译mysql的Qt驱动,看5的步骤;
3.创建ImageCanvas文件夹,将release中生成的ImageCanvas.exe文件拷贝进新建的ImageCanvas文件夹;
将源码目录下的config文件夹、data文件夹、libyaml-cpp.a、yaml-cpp.dll、yaml-cpp.dll.a拷贝进ImageCanvas文件夹;
将libmysql.dll拷贝进ImageCanvas文件夹;
4.打开Qt的命令行模式,切换进入当前创建的ImageCanvas文件夹下,运行指令windeployqt ImageCanvas.exe
软件会自动把Qt中的支持库抽取出来;

5.Qt5.10安装的时候可以选择安装源码,如果不想卸载重装Qt,可以下载Qt5.10的源码,编译mysql的源码即可;

1)如果要安装数据库的话下载这个mysql-installer-community-5.7.18.1.msi,我装的mysql是32位的
,你安装的时候选择custom,选择安装mysqlserver,选择安装32位数据库服务器,修改路径,MySQL Server 5.7这样带空格的改成MySQL-Server-5.7,否则编译时候会报错,如果不改也行,修改mysql.pro的时候,加上引号

INCLUDEPATH += "F:\\mysqlserver\\app\\MySQL-Server-5.7\\include"
LIBS += "F:\\mysqlserver\\app\\MySQL-Server-5.7\\lib\\libmysql.lib"


2)进入Qt\Qt5.10.0\5.10.0\Src\qtbase\src\plugins\sqldrivers目录,修改qsqldriverbase.pri文件将

include($$shadowed($$PWD)/qtsqldrivers-config.pri)


修改为

include($$shadowed($$PWD)/configure.pri)


3) 进入Qt\Qt5.10.0\5.10.0\Src\qtbase\src\plugins\sqldrivers\mysql目录,
注释掉QMAKE_USE += mysql,变成

# QMAKE_USE += mysql


4)在  # QMAKE_USE += mysql 下添加数据库开发库的路径,你自己安装的mysql下面有这些路径

INCLUDEPATH += F:\\mysqlserver\\app\\MySQL-Server-5.7\\include
LIBS += F:\\mysqlserver\\app\\MySQL-Server-5.7\\lib\\libmysql.lib


5)通过Qt的命令行终端进入
Qt\Qt5.10.0\5.10.0\Src\qtbase\src\plugins\sqldrivers\mysql
执行qmake mysql.pro指令生成Makefile
然后执行mingw32-make编译生成qt的mysql驱动
生成的驱动在这个目录下
Qt\Qt5.10.0\5.10.0\Src\qtbase\src\plugins\sqldrivers\plugins\sqldrivers
将4个生成的qsqlmysql.dll、qsqlmysqld.dll、libqsqlmysql.a、libqsqlmysqld.a文件拷贝到Qt\Qt5.10.0\5.10.0\mingw53_32\plugins\sqldrivers下,驱动加载的整个过程算是完成。

 

6) 部分电脑出现Driver not load. Driver not load.的错误,我再main.cpp中添加了

QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())
                       + QDir::separator()+"plugins");
QApplication::addLibraryPath(strLibPath);

将qsqlmysql.dll、qsqlmysqld.dll拷贝到plugins/sqldrivers/下,依然会报错,我换了Qt5.9.3 Qt5.9.7 Qt5.10.0都没有解决这个问题。。。。。。

 

后来我又遇到一种情况,不管按照上面的方法怎么修改,一直出现

QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7
QSqlError("", "Driver not loaded", "Driver not loaded")

编译mysql.pro工程的时候出现问题

.obj/release/qsql_mysql.o:qsql_mysql.cpp:(.text+0x160): undefined reference to `
mysql_num_rows@4'
.obj/release/qsql_mysql.o:qsql_mysql.cpp:(.text+0x18b): undefined reference to `
mysql_stmt_num_rows@4'
....

undefined reference to `mysql_init@4'

后来发现是驱动问题,因为用QT写的是32位程序,而引入的dll是64位,解决办法:下载32位驱动

下载zip的mysql压缩包,按照下面网址操作安装mysql

https://www.cnblogs.com/hupoykitty/p/11605220.html

https://www.cnblogs.com/hcl1991/p/9055378.html

修改可以远程访问mysql

https://www.cnblogs.com/gdsblog/p/7349551.html

修改完成之后登录会出现

问题1:

Can't connect to MySQL server (10060)

解决方法

https://www.cnblogs.com/mmzs/p/9201558.html

我这里出现的问题是win10的防火墙没有开放mysql 3306的端口

端口开放的解决办法

https://blog.csdn.net/yj19961126/article/details/81224107?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

问题2:

1045-Access denied for user 'root'@'localhost'或者@“ip”

修改方法参照

https://blog.csdn.net/qq_36735409/article/details/78032144

大致意思是可以将授权的语句改成:

grant all privileges on *.* to 'root'@'192.168.0.103' identified by '123456';
如果你是本地登录的,那么:
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
当然你也可以直接改成这样:
grant all privileges on *.* to 'root'@'%' identified by '123456';
就可以给所有ip都设定root登陆了。
如果授权成功,会有Query OK的提示。
然后:
flush privileges;
这个是刷新授权的意思,如果没有这句话,授权可能无法立刻生效。
exit;

重新编译mysql.pro

然后编译拷贝,程序可以正常运行

你可能感兴趣的:(Qt,mysql)