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