记一次编译Qt5的mysql驱动过程

在Qt中默认带有sqlite3的驱动,进行sqlite数据库和qt开发就非常方便,但是毕竟sqlite数据库只是轻量级的。

后来采用mysql数据库,但是Qt 默认没有相应的驱动,一连接数据库就报错      QMYSQL ,  diver not loaded之类的,后来在网上搜了写解决办法,需要手动重新编译Qt连接mysql的静态库,但是按照教程下来没有什么作用。

我用的是Ubuntu16.04  的32位,后来发现在编译的时候是相关静态库文件目录弄错了,按照网上其他人的办法行不通,需要在qmake的时候添加上正确的路径然后执行qmake即可.

说明一下,我安装的mysql版本是5.7,  Qt版本是5.5的,  如果是其他的版本可能有所差别

一开始的时候我找到了Qt的 5.5/gcc/plugins/sqldrivers/libqsqlmysql.so  库文件,以为就是这个库文件的问题,用 ldd   libqsqlmysql.so 发现缺少几个链接库,中间想尽各种办法创建替代链接,但是后来都不行,这种办法后来放弃了。


后来开始手动编译,步骤如下

一、修改.pro文件

找到 qt的响应的源码目录  Src/qtbase/src/plugins/sqldrivers/mysql ,(如果没有Qt下没有Src文件夹,那就是安装qt的时候没有选择安装源码包,需要重新安装的时候注意把全部的组件部分都选上),有几个文件.

然后 vi  mysql.pro 打开文件,添加一行,最后添加后的文件内容如下

TARGET = qsqlmysql


SOURCES = main.cpp
OTHER_FILES += mysql.json
include(../../../sql/drivers/mysql/qsql_mysql.pri)


PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)
INCLUDEPATH += -L/usr/lib/i386-linux-gnu -lmysqlclient_r    #添加的共享库文件路径

注意此处的.pro文件一定要用原来的,不能删掉后,自己执行qmake -project生成,qmake命令生成的.pro文件是不能用的,不能用的,不能用的,重要的事情说三遍

添加的就是 INCLUDEPATH 开头的哪一行, -L  后面的   /usr/lib/i386-linux-gnu   就是libmysqlclient.so的库路径。这句话作用就是引入mysql的那个共享库的路径,而后面的 -l后跟的就是库的文件名,至于为什么是mysqlclient_r  下面会说到。

按照网上的教程 这个库文件是在 /usr/lib 或者 /usr/lib/mysql下  ,但是我发现这两个目录下都没有,我的libsqlclient库文件在 /usr/lib/i386-linux-gnu下。

二、找相关缺失的库文件建立链接


重点来了:


我一开始直接在pro文件里添加的就是 -lmysqlclient 对应那个链接接 libmysqlcliet.so但是,添加完成后qmake,然后make出错

/usr/bin/ld: 找不到 -lmysqlclient_r
/usr/bin/ld: 找不到 -lssl
/usr/bin/ld: 找不到 -lcrypto
collect2: error: ld returned 1 exit status
Makefile:131: recipe for target '../../../../plugins/sqldrivers/libqsqlmysql.so' failed
make: *** [../../../../plugins/sqldrivers/libqsqlmysql.so] Error 1

报错是 另外几个库文件找不到 分别是 mysqlclient_r 和 ssl和  crypto三个库文件 ,对应 libmysqlclient_r.so 和libssl.so 和 libcrypto.so (现在明白为什么是libmysqlclient_r了吧

既然文件找不到那么手动去看一下 ,任然进入   cd    /usr/lib/i386-linux-gnu 下执行下

ls  libmysqlclient_r.so  libssl.so  libcrypto.so 

结果都没有

然后查看是不是有类似的文件

ls -l   libmysqlclient*   libssl*  libcrypto*

发现如下

lrwxrwxrwx 1 root root      19 10月  2 17:38 libcrypto.so.10 -> libhcrypto.so.4.1.0
-rw-r--r-- 1 root root 5199174 7月  20 03:38 libmysqlclient.a
lrwxrwxrwx 1 root root      20 7月  20 03:37 libmysqlclient.so -> libmysqlclient.so.20
lrwxrwxrwx 1 root root      24 7月  20 03:37 libmysqlclient.so.20 -> libmysqlclient.so.20.3.6
-rw-r--r-- 1 root root 4051376 7月  20 03:38 libmysqlclient.so.20.3.6
-rw-r--r-- 1 root root  338704 9月  29 21:47 libssl3.so
lrwxrwxrwx 1 root root      10 10月  2 17:36 libssl.so.10 -> libssl3.so

好了,有文件,那么现在当前文件夹下建立链接,说明下,此处需要sudo

 sudo ln -s libmysqlclient.so.20 libmysqlclient_r.so
 sudo ln -s libssl3.so libssl.so
 sudo ln -s libhcrypto.so.4.1.0 libcrypto.so

完成后回到qt的目录  Src/qtbase/src/plugins/sqldrivers/mysql  下

三、qmake、make以及make  install 生成mysql驱动库文件libqsqlmysql.so

再次执行qmake 

然后执行make

rm -f libqsqlmysql.so
g++ -m32 -L/usr/lib -Wl,--no-undefined -Wl,-O1 -Wl,--enable-new-dtags -Wl,-rpath,/home/zhww/Qt5.5.1/5.5/gcc -Wl,-rpath,/home/zhww/Qt5.5.1/5.5/gcc -Wl,-rpath,/home/zhww/Qt5.5.1/5.5/gcc/lib -shared -o libqsqlmysql.so .obj/main.o .obj/qsql_mysql.o .obj/moc_qsql_mysql_p.o  -rdynamic -L/usr/lib/mysql -lmysqlclient_r -lz -lcrypt -lnsl -lm -lssl -lcrypto -L/home/zhww/Qt5.5.1/5.5/gcc/lib -lQt5Sql -lQt5Core -lpthread  
mv -f libqsqlmysql.so ../../../../plugins/sqldrivers/   


可以看到已经生成了 libqsqlmysql.so

然后执行 make install

install -m 755 -p ../../../../plugins/sqldrivers/libqsqlmysql.so /home/zhww/Qt5.5.1/5.5/gcc/plugins/sqldrivers/libqsqlmysql.so
strip --strip-unneeded /home/zhww/Qt5.5.1/5.5/gcc/plugins/sqldrivers/libqsqlmysql.so
install -m 644 -p /home/zhww/Qt5.5.1/5.5/Src/qtbase/lib/cmake/Qt5Sql/Qt5Sql_QMYSQLDriverPlugin.cmake /home/zhww/Qt5.5.1/5.5/gcc/lib/cmake/Qt5Sql/

完成,测试一下

链接mysq数据库成功!






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译Qt与MySQL驱动源代码并在安卓上运行需要以下步骤: 1. 首先,下载并安装Qt开发环境。你可以从官方网站https://www.qt.io/下载最新版本的Qt。 2. 下载MySQL驱动源代码。你可以从MySQL官方网站https://dev.mysql.com/downloads/connector/c/下载MySQL驱动程序的源代码。 3. 解压MySQL驱动源代码并进入解压后的目录中。 4. 使用命令提示符或终端窗口进入Qt安装目录的"Tools"文件夹。根据你的操作系统,这个目录可能是“C:\Qt\Qt版本号\版本号\android_x86_64\bin”或“/opt/Qt/Qt版本号/版本号/android_x86_64/bin”。 5. 执行如下命令以设置Qt并进入Qt的交叉编译终端: ``` cmd /k <PathtoQt>\Qt版本号\版号\android_x86\bin\qtenv2.bat ``` 或 ``` . <PathtoQt>/Qt版本号/版号/android_x86_64/bin/qtcreator.sh ``` 6. 使用命令提示符或终端窗口,进入解压的MySQL驱动源代码目录中的"libmysql"文件夹。 7. 执行如下命令,使用Qt的qmake生成Makefile文件: ``` qmake ``` 8. 执行如下命令,编译MySQL驱动: ``` make ``` 9. 将生成的MySQL驱动安装到Qt的安装目录中。执行如下命令: ``` make install ``` 10. 在Qt项目中测试MySQL驱动是否可以正常使用。 请注意,编译和安装MySQL驱动程序需要一定的时间和计算资源。此外,确保安装了适当版本的Qt和与MySQL驱动程序相匹配的MySQL库。完成以上步骤后,你将能够在安卓设备上使用MySQL数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值