编译环境

系统:Ubuntu18.04

QT版本:Qt 5.14.0

gcc版本:gcc version 7.5.0

qt官方编译驱动方式

在使用QT连接数据库时遇见的第一个错误就是QMYSQL driver not loaded,显然这是缺少mysql的驱动。我们需要手动编译mysql的驱动,qt官方给出的编译教程如下:

C:\Qt5\5.13.2\Src\qtbase\src\plugins\sqldrivers>qmake -version

QMake version 3.1

Using Qt version 5.13.2 in C:/Qt5/5.13.2/mingw73_64/lib

C:\Qt5\5.13.2\Src\qtbase\src\plugins\sqldrivers>qmake -- MYSQL_INCDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/include" MYSQL_LIBDIR="C:/Program Files/MySQL/MySQL Connector C 6.1/lib"

Info: creating stash file C:\Qt5\5.13.2\Src\qtbase\src\plugins\sqldrivers\.qmake.stash

Running configuration tests...

Checking for DB2 (IBM)... no

Checking for InterBase... no

Checking for MySQL... yes

Checking for OCI (Oracle)... no

Checking for ODBC... yes

Checking for PostgreSQL... no

Checking for SQLite (version 2)... no

Checking for TDS (Sybase)... no

Done running configuration tests.

Configure summary:

Qt Sql Drivers:

DB2 (IBM) .............................. no

InterBase .............................. no

MySql .................................. yes

OCI (Oracle) ........................... no

ODBC ................................... yes

PostgreSQL ............................. no

SQLite2 ................................ no

SQLite ................................. yes

Using system provided SQLite ......... no

TDS (Sybase) ........................... no

Qt is now configured for building. Just run 'mingw32-make'.

Once everything is built, you must run 'mingw32-make install'.

Qt will be installed into 'C:\Qt5\5.13.2\mingw73_64'.

Prior to reconfiguration, make sure you remove any leftovers from the previous build.

按照官方的方法,我们需要找到自己mysql头文件和mysql链接库的位置。如果自己的电脑上没有则可以通过mysql网站下载(mariadb和mysql都是使用QMYSQL驱动,因此无论是下载mariadb或者mysql都可以)。如果系统是linux的用户可以通过安装mysql-dev,或者libmariadbclient-dev,不同的linux发行版其包也不同。

mysql connector下载地址:https://downloads.mysql.com/archives/c-cpp/

选择对应自己系统版本的包下载,因为我个人不喜欢麻烦,所以我选择ubuntu的x64deb包进行安装。安装以后需要找到头文件和库文件路径。例如我的是:

/usr/include/mysql# 头文件

/usr/lib/x86_64-linux-gnu/libmysqlcppconn.so.7.8.0.19# 库文件

如果不知道确切位置,可以通过find进行搜索。

find / mysql 2> /dev/null | grep mysql | grep h

find /mysql 2 > /dev/null | grep mysql | grep so

这时候需要把库文件复制到任意能找到的目录,并修改文件名为libmysql.so,也可以通过链接的方式。

cp /usr/lib/x86_64-linux-gnu/libmysqlcppconn.so.7.8.0.19 /home/yerain/Downloads/libmysql.so

# OR

ln -s /usr/lib/x86_64-linux-gnu/libmysqlcppconn.so.7.8.0.19 /home/yerain/Downloads/libmysql.so

** 注意:如果安装的是mariadb,和mysql操作相同。 **

接下来就是编译,在终端下切换到qtsql源文件目录下,例如我的是/home/yerain/Tools/Qt5.14.0/5.14.0/Src/qtbase/src/plugins/sqldrivers。在此目录下执行qmake进行编译:

qmake -- MYSQL_INCDIR="/usr/include/mysql" LIBS="/home/yerain/Downloads/libmysql.so"# 注意修改某些参数

# 然后执行

make

# 将生成的库文件安装到gcc目录

make install

让人遗憾的是按照官方的方法,我并没有成功编译mysql驱动。按照make的输出来看,我只成功编译了sqlite的驱动。

不过可能是我的环境问题,而且我引用官方原文教程只是希望多一种可以尝试的方法。

成功编译的方法

该方法建立在官方教程的基础上,也就是需要将mysql(OR mariadb) connector 的头文件和库文件准备好。修改/home/yerain/Tools/Qt5.14.0/5.14.0/Src/qtbase/src/plugins/sqldrivers/mysql/mysql.pro项目文件(注意更换为自己的qt路径),注释掉QMAKE_USE += mysql。

# QMAKE_USE += mysql

然后添加头文件和库文件路径

INCLUDEPATH += /usr/include/mysql

DEPENDPATH += /usr/include/mysql

LIBS += /home/yerain/Downloads/libmysql.so

# 同样注意更换路径

添加完后在终端(windows 用cmd OR power shell)执行

qmake

# qmake以后执行

make && make install

编译完成以后即可在/home/yerain/Tools/Qt5.14.0/5.14.0/gcc_64/plugins/sqldrivers中看到增加的libqsqlmysql.so和libqsqlmysql.so.debug文件,这代表已经成功安装qmysql驱动。(如果找不到,可以检查/home/yerain/Tools/Qt5.14.0/5.14.0/Src/qtbase/src/plugins/sqldrivers/plugins/sqldrivers下是否有这两个文件,有的话直接复制到Qt5.14.0/5.14.0/gcc_64/plugins/sqldrivers下即可)。

测试

测试代码:

/* QT连接数据库测试 */

qDebug() << "连接数据库...";

// 连接mysql

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

db.setHostName("localhost");

db.setUserName("root");

db.setPassword("123456789");

db.setDatabaseName("qt_test");

if(!db.open()){

qDebug() << "mysql连接失败! => " << db.lastError().text();

exit(0); // 连接失败退出程序

}

qDebug() << "mysql连接成功!";

QSqlQuery query(db);

if(!query.exec("select * from user")){

qDebug() << "查询失败 => " << query.lastError();

exit(0);

}

qDebug() << "查询成功";

qDebug() << "-----------------------------------------" << endl;

// qDebug() << "ID" << "\tname" << "\tpassword";

while(query.next()){

qDebug() << query.value(0).toInt() << "\t"

<< query.value(1).toString() << "\t"

<< query.value(2).toString();

}

qDebug() << "-----------------------------------------";

qDebug() << query.lastQuery();

db.close();

结果:

结语

如果vim或者没有合适的编辑器的话,可以直接使用QT Create打开.pro项目文件,然后右键编译需要编译的项目即可。

ubuntu qt编译mysql报错_[Linux]QT编译Mysql驱动(Mariadb驱动),解决qmake报错问题相关推荐

  1. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  2. 打开mysql3306库报错_允许远程链接mysql,开放3306端口

    首先查看端口是否打开 netstat -an|grep 3306 此图为开启3306端口的截图,之前显示为. . . 127.0.0.1:3306 . . . 打开mysql配置文件vi /etc/m ...

  3. mysql notifier启动_开机的时候mysql notifier报错无法启动怎么办?

    在 System.Xml.XmlTextReaderImpl.Throw(Exception e) 在 System.Xml.XmlTextReaderImpl.ParseDocumentConten ...

  4. 闪退没由报错_秉承工匠精神,3步定位飞桨报错原因,你也来试试?

    点击左上方蓝字关注我们 [故事的开始-]小张是一名AI算法攻城狮,听闻飞桨乃国产开源深度学习框架之光,心想炎黄子孙当自强,用自己的深度学习框架,实现中国的AI梦--他尝试在的笔记本上使用飞桨搭建线性回 ...

  5. ecplice中class.forname一直报错_英雄联盟LOL闪退,弹出吉格斯报错BUGSPLAT

    不少玩家进入游戏对局之前就会弹出吉格斯报错,或者游戏中途出现报错等情况,网上说的办法很多,什么分辨率设置不对,提高虚拟内存,卸载一些不用软件等,都是有用的办法.弹窗下面有三个可点击,左边是上传错误日志 ...

  6. linux mysql依赖关系_[Linux]-MySQL主从复制

    MySQL支持的复制类型: 1) 基于语句的复制.在主服务器上执行的SQL语句,在从服务器上执行同样的语句.MySQL默认采用基于语句的复制,效率比较高: 2) 基于行的复制.把改变的内容复制过去,而 ...

  7. qt连接mysql创建表_用Qt访问数据库写一个 表格

    访问数据库,将数据填充数据表格大致样子如下: 该怎么实现呢. 首先创建一个数据库模型的对象:QSqlQueryModel *model = new QSqlQueryModel; 然后提取数据库数据: ...

  8. qt如何用python结合_在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

  9. mysql二进制格式_二进制格式安装 MySQL

    二进制格式安装 MySQL 什么是通用二进制格式? 已经编译进行过编译的软件包, 下载到本机直接解压到特定的目录下就可以使用的格式. 1. 查询本地是否安装 mysql 数据库相关的软件包 (卸载之) ...

最新文章

  1. 关于Horizon 7 Agent与远程桌面(mstsc)兼容性问题解决办法
  2. ScrollView 嵌套EditText 滑动冲突解决
  3. CSS 五种方式实现 Footer 置底
  4. Windows上部署Ngnix
  5. 机器学习知识点(三十三)机器学习入门的数学基础
  6. JS(JavaScript)的初了解6(更新中···)
  7. 利用ASP控制WEB打印代码方法集合
  8. Windows API CreateWaitableTimer和SetWaitableTimer
  9. 关于停止发表“每周新闻回顾”的通知
  10. IPLAT62--后台返回提示参数
  11. 到底应不应该表达自己对工作安排的不满?
  12. python学习之字符串函数用法
  13. spring源码:@Import注解
  14. 进去springstrap显示无响应_何为优秀显示器?显示器参数标准主观讨论
  15. 网易云音乐api,网络太拥挤,登录失败
  16. MongoDB 分片集群搭建
  17. 中国慕课moocpython答案_中国大学慕课mooc2020用Python玩转数据题目答案
  18. web前端开发人员要求,css设置背景图片自适应
  19. 《交互式程序设计 第2版》一1.2.4 交互语言
  20. Kotlin之身份证阅读器(华视)二次开发

热门文章

  1. SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪
  2. Vi(Vim)快捷键
  3. Mapper method ‘com.xxx.dao.ActivityDao.update attempted to return null from a method with a primiti
  4. jmeter响应数据为空的问题
  5. 办公室必备-上班偷看小说利器
  6. 《走出自己的围城-2017年终总结》
  7. 《Long Short-Term Memory》翻译,Sepp Hochreiter, ¨urgen Schmidhuber.1997,9(8):1735-1780
  8. IIS的ASP木马怎么上传的
  9. 【python】都2022年不会还有人不会在电脑桌面上养宠物吧~
  10. xv6源码解析(一)——系统启动