게으른 컴공생
article thumbnail

아.. 이 문제 때문에 얼마나 많은 시간을 보내버린 건지 ㅋㅋ

 

일단 나는 qt 5.15.2, qt creator 4.14.0 community, mysql 8.0.22 64bit, visual studio 2019 community를 가지고 진행했다.

qt creator에서 msvc2019 64bit을 가지고 프로젝트를 만든 뒤

프로젝트 파일에서 sql 추가, main에서 QSqlDatabase, QtDebug를 include한 다음에

qDebug() << QSqlDatabase::drivers(); 를 추가하고 빌드하면

사용 가능한 sql driver 목록이 나온다.

 

나는 mysql driver가 필요한데 없어서 추가하기 위해 다음 문서를 참고했다.

doc.qt.io/qt-5/sql-driver.html

문서를 요약하자면 sqlite를 제외하고는 기본적으로 제공되지 않기 때문에 따로 추가를 해줘야 하고,

각 드라이버 별로 추가를 위한 command가 있다는 것이었다.

 

아직 나도 제대로 이해가 안된 상태이기는 하지만 설명해보려한다.

일단 위에서 명시한 프로그램들을 모두 설치해야 한다.

1. qt online installer로 qt 5.15.2, qt creator를 설치한다. 이때 window에서 쓰는 debugging 툴도 같이 설치해야 하는데 안깔았어서 이후에 window sdk를 따로 설치했다.

2. visual studio 2019 community version을 설치한다.

3. mysql web installer를 이용해서 mysql server를 설치한다. 문서에 따르면, mysql 8.0.19 버전 부터는 C connector가 아니라 server를 설치해야한다고 한다.

4. qt creator에서 console application을 msvc 2019 64 bit kit을 선택해 만들어서

위에서 설명한 방법으로 driver 목록을 출력한다.

5. mysql이 없으면 아래와 같이 진행한다.

6. qt 5.15.2 (msvc 2019 64bit)를 실행한다. 이 프로그램이 뭔지 아직도 잘 이해가 안되는데 그냥 qt용 cmd 정도로 이해하고 있다.

7. cd {qt설치경로}\5.15.2\Src\qtbase\src\plugins\sqldrivers 를 입력한다.

8. qmake -- MYSQL_INCDIR="{mysql 설치경로}\MySQL Server 8.0\include" MYSQL_LIBDIR="{mysql 설치경로}\MySQL Server 8.0\lib" 를 입력한다.

8-1. 입력했는데 ject ERROR: Cannot run compiler 'cl'. Output: =================== =================== Maybe you forgot to setup the environment?

이런 에러가 발생하면 아래를 진행해본다.

8-1-1. visual studio 2019에서 확장-확장관리 에서 qt를 검색해서 나오는 addon? plugin?을 설치한다.

이후 qt용 프로젝트를 하나 만든다. 그러면 중간에 어떤 qt 버전을 적용할지 선택하는 메뉴가 나오는데, 이때 목록에 qt 버전이 하나도 안뜨면 아래에 빨간 글씨가 하라는대로 qt vs tool - qt options에서 add를 누르고 {qt설치경로}\5.15.2\msvc2019_64 경로를 추가해준다. qt 프로젝트를 만들고 나면 끝

8-1-2. window sdk를 설치한다. 나는 현재 2021/01/14 기준 window 10 sdk 가장 최신 버전인 

developer.microsoft.com/ko-kr/windows/downloads/windows-10-sdk/

10.0.19041.0을 설치했다. 잘 모르겠어서 그냥 모든 옵션을 다 체크하고 설치했다.

8-1-3. qt 5.15.2 (msvc 2019 64bit) 에서 {visual studio 2019 community 설치 경로-보통 program file(x86)\visual studio\2019\community}\VC\Auxiliary\Build 경로에 있는 vcvarsall.bat을 실행한다. 그냥 실행하면 무슨 옵션을 입력하라고 나오는데 achitecture 버전만 지정해주면 나머지는 알아서 선택해주더라.

나는 현재 64bit이고 amd cpu를 쓰고 있어서 amd64를 선택했는데 x86_amd64라는 것도 있더라 뭔지 잘 모르는데 그냥 느낌 가는대로 선택했고 결과적으로 성공함. 추가적으로 알아보길 권장

성공적으로 실행하면 얘가 환경변수들을 알아서 설정해주는 것 같다.

9. 입력했는데 뭔가 좌라락 뜨고 에러가 아니라 성공한 것 같다면 nmake sub-mysql을 입력

10. 이것도 좌라락 뜨고 성공한 것 같다면 nmake install

11. 이것도 좌라락 뜨고 성공한 것 같다면 qt creator로 돌아가서 다시 driver를 출력해보자 그럼 QMYSQL 드라이버가 보인다.

 

8-1-1부터 8-1-3 중에 하나의 방법이 8-1의 에러를 해결해준 것 같다. 내 생각엔 8-1-3 인듯?

 

참고 : qt 5.15.2 mingw종류는 mingw 컴파일러?를 가지고 명령어를 처리하는 것 같은데 얘가 공백을 인식을 못한다고 한다. 그래서 qmake -- MYSQL_INCDIR="{mysql 설치경로}\MySQL Server 8.0\include" MYSQL_LIBDIR="{mysql 설치경로}\MySQL Server 8.0\lib" 를 입력하면 중간 경로에 공백이 있으면 에러가 뜬다.(program files나 mysql server 8.0 이런데 공백이 있음)

stackoverflow.com/questions/5999507/mingw-make-cant-handle-spaces-in-path

공백을 인식하게 하기 위해 공백 전에 슬래시를 넣는다던가 아니면 short path를 이용한다던가 하는 방법도 안먹히고 설치된 폴더 이름을 임의적으로 바꾸면 안될 것 같아서 나는 그냥 msvc 2019 컴파일러를 이용했다.

 

영롱한 QMYSQL

정말 눈물이 나는 사진이다. ㅜㅜ

 

 

+ QMYSQL driver not loaded 에러의 경우

mysql server의 lib폴더 안의 libmysql.lib, libmysql.dll을 qt 프로젝트 폴더 안 build 폴더에 복붙한다. 

 

+ QSqlDatabase 클래스로 host, user 등등 설정하고 open 했을 때 연결이 안되면 qDebug << QSqlDatabase::lastError()로 뭐가 문제인지 확인 가능하다.(static 함수인 건 아님)

나 같은 경우 1045 error가 발생했는데, mysql 유저의 권한 문제였던 것으로 보인다. 대충 유저 만들고 권한 주고 건드리다가 보니까 해결됐다.

profile

게으른 컴공생

@노나니노나

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그