Qt – MySQL Driver not loaded on Ubuntu

Windows에서 Ubuntu로 포팅하는 도중 mysql 드라이버가 안잡히는 오류를 발견했다.
<Qt 경로>/gcc_64/plugins/sqldrivers 안의 libqsqlmysql.so를 확인해봤더니

hooni@hooni-laptop:~/Qt/5.11.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
	linux-vdso.so.1 (0x00007ffd30dc0000)
	libQt5Sql.so.5 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f41cecf4000)
	libQt5Core.so.5 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f41ce59a000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f41ce37b000)
	libmysqlclient.so.18 => not found
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f41cdff2000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f41cdc54000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f41cda3c000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f41cd64b000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f41cd42e000)
	libicui18n.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f41ccf95000)
	libicuuc.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f41ccbdd000)
	libicudata.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f41cb1fa000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f41caff6000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f41cadf4000)
	libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f41caade000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f41cf14f000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f41ca86c000)

libmysqlclient.so.18 => not found가 문제였다.
apt-get install libmysqlclient-dev만으로는 해결이 안돼서, so.18을 설치해야 해결되나 싶었다.
혹시나 하고 현재 설치된걸 확인해보니

hooni@hooni-laptop:~/Qt/5.11.1/gcc_64/plugins/sqldrivers$ ls /usr -R | egrep libmysqlclient
libmysqlclient.a
libmysqlclient.so
libmysqlclient.so.20
libmysqlclient.so.20.3.11
default-libmysqlclient-dev
libmysqlclient-dev
libmysqlclient20
/usr/share/doc/default-libmysqlclient-dev:
/usr/share/doc/libmysqlclient-dev:
/usr/share/doc/libmysqlclient-dev/examples:
/usr/share/doc/libmysqlclient20:

역시 컴퓨터에는 18버전이 설치되어있지 않다.
문제는 현재 libmysqlclient 버전이 업데이트되어서 so.20밖에 안깔린다.
그래서 libmysqlclient.so.18을 찾아 모험을 떠났는데 결국 찾을 수가 없었다.
(아마 따로 repository를 찾아 등록해줘야하는 모양)

다행히 Qt쪽에서 드라이버를 빌드할 수 있게 해줬다. (Qt 공식, Qt 포럼 글)
빌드를 하게되면 컴퓨터에 설치된 libmysqlclient가 자동으로 링크가 된다.
configure, qmake, make, make install 과정을 거치면 된다.

먼저 Qt 경로/Src로 가서 configure를 해주자.
configure -sql-mysql로 mysql 사용 설정을 해준 후 오픈 소스버전으로 설치하면 된다.

그 후 Qt 경로/Src/qtbase/src/plugins/sqldrivers/mysql로 가서
qmake, make, make install 과정을 거치면 된다.
그러면

hooni@hooni-laptop:~/Qt/5.11.1/gcc_64/plugins/sqldrivers$ ldd libqsqlmysql.so
	linux-vdso.so.1 (0x00007fff8fefe000)
	libQt5Sql.so.5 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libQt5Sql.so.5 (0x00007f2508fcd000)
	libQt5Core.so.5 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libQt5Core.so.5 (0x00007f2508873000)
	libmysqlclient.so.20 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 (0x00007f2508261000)
	libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2507ed8000)
	libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2507ae7000)
	libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f25078c8000)
	libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f250752a000)
	libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2507312000)
	libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f25070f5000)
	libicui18n.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicui18n.so.56 (0x00007f2506c5c000)
	libicuuc.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicuuc.so.56 (0x00007f25068a4000)
	libicudata.so.56 => /home/hooni/Qt/5.11.1/gcc_64/plugins/sqldrivers/./../../lib/libicudata.so.56 (0x00007f2504ec1000)
	libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f2504cbd000)
	libgthread-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0 (0x00007f2504abb000)
	libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f25047a5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f2509428000)
	libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f2504533000)

잘된다.

한편, 위의 방법은 Qt 소스를 내려받은 경우에만 가능한 방법으로 apt-get을 이용해 Qt를 설치한 경우에는 사용할 수 없다.
하지만 해결방법은 더욱 간단하다.
apt-get을 통해 Qt를 설치한 경우에는 단순히 apt-get으로 libqt5sql5-mysql를 설치해주는 것만으로 위의 과정을 자동으로 수행할 수 있다.
mysql 말고도 다른 드라이버를 설치할수도 있다.

이런 에러는 모르면 몇날며칠이고 계속 시간을 잡아먹는데
알고나면 처리하는데 5분도 안걸리니
상당히 짜증난다.

다음 문제는 db 커넥터를 mysql에서 mariadb로 바꾸는 일이다.
mysql 커넥터가지고 상용화는 꿈도 못꾸지

Hits: 183

댓글 남기기