QT

qt mysql 연결 오류 해결 방법 - QMYSQL driver not loaded

크게웃기 2022. 7. 14. 11:38
반응형

qt mysql 연결 오류 해결방법

간만에 QT 프로그램을 이용해서 MYSQL 연결 하려고 했더니 연결이 되지 않아 기록을 남겨 봅니다.

 

OS : Ubuntu 16.04 

QT VER : 5.9.9

 

기본적인 연결 방법은 아래 글을 확인해 보시면 됩니다.

2019.01.31 - [QT] - [QT] QT Application에 SQLite , mariaDB 연결하기

 

[QT] QT Application에 SQLite , mariaDB 연결하기

QT Application에 SQLite 또는 MariaDB 연결하기. 아무리 간단한 Application 이라도 설정값을 저장하기 위해 대부분 DB연결이 필요하기에 간단히 SQLite와 MariaDB 연결하는 방법을 블로그 해놓습니다. 1. 프로

kakao-pc.tistory.com

 

프로그램실행시 아래와 같은 Error 가 발생하며 DB Open 이 되지 않습니다.

하지만, 관련 Driver는 모두 존재한다고 하네요.

QML debugging is enabled. Only use this in a safe environment.
("QSQLITE", "QMYSQL", "QMYSQL3", "QPSQL", "QPSQL7")
QSqlDatabase: QMYSQL driver not loaded
QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7
QSqlDatabase: an instance of QCoreApplication is required for loading driver plugi

 

이래 저래 검색을 하다가, 문제가 되는 부분을 찾았습니다.

여기서 부턴 애드블록을 해제를 해야 확인 가능합니다.

aaaaa@aaaa:~/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers$ ldd ./libqsqlmysql.so 
	linux-vdso.so.1 =>  (0x00007ffee7ba9000)
	libQt5Sql.so.5 => /home/aaaa/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f34b541c000)
	libQt5Core.so.5 => /home/aaaa/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f34b4cd5000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f34b4ab8000)
	libmysqlclient.so.18 => not found
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f34b4736000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f34b442d000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f34b4217000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f34b3e4d000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f34b3c33000)
	libicui18n.so.56 => /home/aaaa/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f34b379a000)
	libicuuc.so.56 => /home/aaaa/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f34b33e2000)
	libicudata.so.56 => /home/aaaa/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f34b19ff000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f34b17fb000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f34b15f9000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f34b12e8000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f34b5876000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f34b1078000)

위 Log를 보시면 libmysqlclient.so.18 => not found 라고 되어져 있습니다.

 

 

그럼 이제, PC에 설치되어져 있는 libmysqlclient 버젼을 확인해 봅니다.

abcd@abcd:/usr/lib/x86_64-linux-gnu$ ls -al libmys*
-rw-r--r-- 1 root root 4724990  1월 29  2021 libmysqlclient.a
lrwxrwxrwx 1 root root      20  1월 29  2021 libmysqlclient.so -> libmysqlclient.so.20
lrwxrwxrwx 1 root root      25  1월 29  2021 libmysqlclient.so.20 -> libmysqlclient.so.20.3.20
-rw-r--r-- 1 root root 3872160  1월 29  2021 libmysqlclient.so.20.3.20

 

QT에서 제공하는 libqsqlmysql.so 는 libmysqlclient.so.18 을 필요로 하는데,

내 PC에는 libmysqlclient.so.20으로 설치되어져 있습니다.

 

문제 원인은 나왔네요.

qt 5.9.9에서 제공하는 libqsqlmysql.so 에서 필요로 하는 libmysqlclient.so 버젼과 내 PC에 설치되어져 있는 libmysqlclient 버젼이 다른것이 원인이네요.

 

이제 해결책을 찾아 봅시다. 두가지 방법을 생각해 보았습니다.

1. qt open source 받아서 build하기.

2.  libmysqlclient.so.18 설치.

 

1번 방법은 시간이 많이 걸리고, 2번 방법은 ubuntu에 정상적인 package가 존재하지 않습니다.

 

그래서, 그냥 인터넷에서 libmysqlclient.so.18 버젼을 찾아서 /lib/x86.../ 에 넣어 줍니다.

아래 파일 올려 둡니다.

libmysqlclient.so.18.1.0
3.71MB

 

해당 파일을 다운 받아서 ubuntu의 아래와 같이 진행합니다.

sudo cp libmysqlclient.so.18.1.0 /lib/x86_64-linux-gnu/libmysqlclient.so.18.1.0
sudo ln -s libmysqlclient.so.18.1.0 libmysqlclient.so.18

 

그럼, 이제 다시 ldd 를 이용해서 library link를 다시 확인 해봅니다.

ldd ./libqsqlmysql.so 
	linux-vdso.so.1 =>  (0x00007fff257c3000)
	libQt5Sql.so.5 => /home/bbbb/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f1474bbb000)
	libQt5Core.so.5 => /home/bbbb/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f1474474000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1474257000)
	libmysqlclient.so.18 => /lib/x86_64-linux-gnu/libmysqlclient.so.18 (0x00007f1473c9b000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1473919000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1473610000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f14733fa000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1473030000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1472e16000)
	libicui18n.so.56 => /home/bbbb/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f147297d000)
	libicuuc.so.56 => /home/bbbb/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f14725c5000)
	libicudata.so.56 => /home/bbbb/Qt5.9.9/5.9.9/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f1470be2000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f14709de000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f14707dc000)
	libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f14704cb000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f1475015000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f147025b000)

libmysqlclient.so.18 가 정상적으로 링크가 되었습니다.

 

프로그램을 구동하면 정상동작 하는 것을 확인 할 수 있습니다.

 

끝.

반응형