Ubuntu20.04+Qt5.12.12编译libqsqlmysql.so报错问题解决


感谢以下大神的帮助!
luxuriousLL: Qt连接MySql驱动加载失败问题解决方法
ai2018: ubuntu18.04.2 LTS 系统关于Qt5.12.3 无法加载mysql驱动,需要重新编译MYSQL数据库驱动的问题以及解决方案

报错1:Project ERROR: Library 'mysql' is not defined.

查看驱动库中是否存在mysql的驱动

root@shixz-ubuntu:/opt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/mysql# ll /opt/Qt5.12.12/5.12.12/gcc_64/plugins/sqldrivers/
总用量 1528
drwxrwxr-x  2 root root    4096 2月  26 13:15 ./
drwxrwxr-x 34 root root    4096 2月  26 13:15 ../
-rwxr-xr-x  1 root root 1315648 11月 17 21:45 libqsqlite.so*
-rwxr-xr-x  1 root root  119352 11月 17 21:44 libqsqlodbc.so*
-rwxr-xr-x  1 root root  112440 11月 17 21:44 libqsqlpsql.so*

没有查询到相关的动态库,需要根据现有安装的mysql库进行编译。

查看mysql库的路径以及版本

mysql头文件路径

root@shixz-ubuntu:/usr/include/mysql# ls
big_endian.h              my_getopt.h         my_thread_local.h
binary_log_types.h        my_global.h         my_xml.h
byte_order_generic.h      my_list.h           plugin_audit.h
byte_order_generic_x86.h  mysql               plugin_ftparser.h
decimal.h                 mysql_com.h         plugin_group_replication.h
errmsg.h                  mysql_com_server.h  plugin.h
keycache.h                mysqld_ername.h     plugin_keyring.h
little_endian.h           mysqld_error.h      plugin_validate_password.h
m_ctype.h                 mysql_embed.h       sql_common.h
m_string.h                mysql.h             sql_state.h
my_alloc.h                mysql_time.h        sslopt-case.h
my_byteorder.h            mysql_version.h     sslopt-longopts.h
my_command.h              mysqlx_ername.h     sslopt-vars.h
my_compiler.h             mysqlx_error.h      thr_cond.h
my_config.h               mysqlx_version.h    thr_mutex.h
my_dbug.h                 my_sys.h            thr_rwlock.h
my_dir.h                  my_thread.h         typelib.h

mysqlclient路径及版本

root@shixz-ubuntu:/usr/include/mysql# ll /usr/lib/x86_64-linux-gnu/libmysql*
-rw-r--r-- 1 root root  10672582 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqlclient.a
lrwxrwxrwx 1 root root        20 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqlclient.so -> libmysqlclient.so.20
lrwxrwxrwx 1 root root        25 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 -> libmysqlclient.so.20.3.18
-rw-r--r-- 1 root root   6409392 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20.3.18
lrwxrwxrwx 1 root root        25 2月  26 11:50 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21 -> libmysqlclient.so.21.2.28
-rw-r--r-- 1 root root   7526440 1月  29 03:36 /usr/lib/x86_64-linux-gnu/libmysqlclient.so.21.2.28
-rw-r--r-- 1 root root  53743046 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqld.a
-rw-r--r-- 1 root root 130442418 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqld-debug.a
-rw-r--r-- 1 root root     15950 6月   2  2020 /usr/lib/x86_64-linux-gnu/libmysqlservices.a

编译安装QT MySQL驱动包

(1)进入qt源代码路径下的mysql目录(这里的目录因人而异,是你本地安装QT源代码的目录,我这里是/opt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/mysql

(2)使用QT自带的qmake命令编译该工程。

/opt/Qt5.12.12/5.12.12/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient" mysql.pro

执行后还会出现其他报错,见后续

报错2:Cannot read qtsqldrivers-config.pri: No such file or directory

此问题中没有这样的文件,但是可以在目录/opt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/

root@shixz-ubuntu:/opt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/mysql# ll ../
总用量 92
drwxrwxr-x 14 root root 4096 2月  28 09:54 ./
drwxrwxr-x 12 root root 4096 2月  26 13:14 ../
-rw-r--r--  1 root root 8240 11月 16 14:41 configure.json
-rw-r--r--  1 root root 2905 11月 16 14:41 configure.pri
drwxrwxr-x  2 root root 4096 2月  26 13:14 db2/
drwxrwxr-x  2 root root 4096 2月  26 13:14 ibase/
drwxr-xr-x  3 root root 4096 2月  28 09:47 lib/
drwxr-xr-x  4 root root 4096 2月  26 16:24 mkspecs/
drwxrwxr-x  5 root root 4096 2月  28 09:49 mysql/
drwxrwxr-x  2 root root 4096 2月  26 13:14 oci/
drwxrwxr-x  2 root root 4096 2月  26 13:14 odbc/
drwxr-xr-x  3 root root 4096 2月  28 09:47 plugins/
drwxrwxr-x  2 root root 4096 2月  26 13:14 psql/
-rw-r--r--  1 root root  703 11月 16 14:41 .qmake.conf
-rw-r--r--  1 root root  687 2月  26 16:24 .qmake.stash
-rw-r--r--  1 root root  250 2月  28 09:54 qsqldriverbase.pri
-rw-r--r--  1 root root  226 11月 16 14:41 README
-rw-r--r--  1 root root  505 11月 16 14:41 sqldrivers.pro
drwxrwxr-x  2 root root 4096 2月  26 13:14 sqlite/
drwxrwxr-x  2 root root 4096 2月  26 13:14 sqlite2/
drwxrwxr-x  2 root root 4096 2月  26 13:14 tds/

可以找到configure.pri这个文件,那么我们就把原来需要qtsqldrivers-config.pri的地方注释掉,改成configure.pri。
  打开qsqldriverbase.pri文件,将第四行注释掉,即#include($ s h a d o w e d ( shadowed( shadowed( $PWD)/qtsqldrivers-config.pri),然后添加include(./configure.pri),保存,完成。

root@shixz-ubuntu:/opt/Qt5.12.12/5.12.12/Src/qtbase/src/plugins/sqldrivers/mysql# cat ../qsqldriverbase.pri 
QT  = core core-private sql-private

# For QMAKE_USE in the parent projects.
#include($$shadowed($$PWD)/qtsqldrivers-config.pri)
include(./configure.pri)

PLUGIN_TYPE = sqldrivers
load(qt_plugin)

DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII

再次执行

/opt/Qt5.12.12/5.12.12/gcc_64/bin/qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=-L/usr/lib/x86_64-linux-gnu/ -lmysqlclient" mysql.pro
make && make install
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值