Qt Mysql 연동 – Win/Linux/Mac

어쩌다보니 윈도우, 우분투, 맥에서 Qt 플젝을 공유해 쓰게됐다.
이런 일도 흔하진 않겠다 싶어 기록을 남겨본다.
Qt에서 MySQL을 로드하는 방법이다.

Windows

Windows가 가장 쉽다.
32-bit 또는 64-bit libmysql.dll를 다운받아 <Qt경로>/<컴파일러>/bin 안에 넣어주고
환경변수에 해당 경로를 등록해주기만 하면 된다.
dll파일은 MySQL 홈페이지에서 배포하는 서버 압축파일에 들어있다.

Ubuntu

Ubuntu의 경우에는 링킹을 시켜줘야 한다.
libmysql을 설치하면 자동으로 libmysqlclient.<version>.so가 설치되는데
ldd libqsqlmysql.so를 통해 링크가 연결되어있는지 확인하면 된다.
버전이 맞으면 보통 여기서 해결이 되는데, 버전이 맞지 않으면 sqldriver를 다시 빌드해서 링크를 연결해주어야 한다.
필자는 libmysqlclient20을 사용하는데, qt에서는 libmysqlclient18을 사용하는 것으로 되어있어 문제가 생겼었다.
다행히 공식 홈페이지에서 빌드 방법을 안내한다.
삽질 내용이 블로그에 있다.

Mac

Mac은 좀 짜증나지만 방법은 같다.
<Qt경로>/<컴파일러>/plugins/sqldrivers 안에 있는 libqsqlmysql.dylib에 대해
otool을 이용해서 링크하고있는 라이브러리를 찾아야 한다.
Linux처럼 친절하지가 않아서, 뭐가 없으면 없다고 표시를 안해준다.
libmysqlclient.<version>.dylib의 링크 위치를 찾아 실제로 그런 파일이 존재하는지 찾아주면 된다.
만약 없다면 brew로 설치해주면 되고, 있는데 버전이 달라 링킹이 안되는경우 링크를 바꿔줘야한다.
다음은 install_name_tool을 이용해 링크 위치를 변경하는 방법이다.

SeongHun-Lee-ui-MacBook-Air:plugins hooni$ cd sqldrivers/
SeongHun-Lee-ui-MacBook-Air:sqldrivers hooni$ otool -L libqsqlmysql.dylib
libqsqlmysql.dylib:
	libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
	@rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.11.0, current version 5.11.1)
	@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.11.0, current version 5.11.1)
	/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
	/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
	/usr/local/mysql/lib/libmysqlclient.20.dylib (compatibility version 20.0.0, current version 20.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.5.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.50.2)
SeongHun-Lee-ui-MacBook-Air:sqldrivers hooni$ install_name_tool -change /usr/local/mysql/lib/libmysqlclient.20.dylib /usr/local/opt/mysql/lib/libmysqlclient.21.dylib ./libqsqlmysql.dylib
SeongHun-Lee-ui-MacBook-Air:sqldrivers hooni$ otool -L libqsqlmysql.dylib
libqsqlmysql.dylib:
	libqsqlmysql.dylib (compatibility version 0.0.0, current version 0.0.0)
	@rpath/QtSql.framework/Versions/5/QtSql (compatibility version 5.11.0, current version 5.11.1)
	@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.11.0, current version 5.11.1)
	/System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0)
	/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
	/usr/local/opt/mysql/lib/libmysqlclient.21.dylib (compatibility version 20.0.0, current version 20.0.0)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.5.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.50.2)
SeongHun-Lee-ui-MacBook-Air:sqldrivers hooni$ pwd
/Users/hooni/Qt/5.11.1/clang_64/plugins/sqldrivers
바뀐다.

알면 5분도 안걸리는데, 모르면 5일은 걸린다.

Hits: 544

댓글 남기기