qt mysql 연결 오류 해결방법
간만에 QT 프로그램을 이용해서 MYSQL 연결 하려고 했더니 연결이 되지 않아 기록을 남겨 봅니다.
OS : Ubuntu 16.04
QT VER : 5.9.9
기본적인 연결 방법은 아래 글을 확인해 보시면 됩니다.
2019.01.31 - [QT] - [QT] QT Application에 SQLite , mariaDB 연결하기
프로그램실행시 아래와 같은 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.../ 에 넣어 줍니다.
아래 파일 올려 둡니다.
해당 파일을 다운 받아서 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 가 정상적으로 링크가 되었습니다.
프로그램을 구동하면 정상동작 하는 것을 확인 할 수 있습니다.
끝.
'QT' 카테고리의 다른 글
QT tesseract ocr 기능 구현. (0) | 2021.11.04 |
---|---|
ubuntu에서 windows용 QT Application build 하기 (0) | 2021.05.27 |
Ubuntu 18.04에 QT Application 개발환경 설정 (0) | 2020.03.12 |
Qt Dll 실행 오류 (0) | 2020.02.18 |
ubuntu 16.04 메뉴 및 패널 제거 (0) | 2019.09.17 |