DB/MYSQL

[작성중]MYSQL Connector 8.0 C++ 빌드하기

MAKGA 2022. 5. 19. 00:05
320x100

 

Release 버전은 문제가 없었는데 Debug용은 Oracle에서 제공하는 Connector와 프로젝트에서 사용중인 런타임 라이브러리 옵션이 맞지 않아 MYSQL Connector 소스를 가지고 빌드를 해야되는 경우가 생겼다.

(공식 홈페이지에서 제공하는건 /MD와 /MDd 뿐)

불행의 시작

 

 

준비물은 다음과 같다.

1. MYSQL Connector C++ Source 

https://downloads.mysql.com/archives/c-cpp/

 

2. CMake-GUI

https://cmake.org/download/

 

3. OpenSSL

https://github.com/openssl/openssl

윈도우 버전 빌드: https://kb.firedaemon.com/support/solutions/articles/4000121705-firedaemon-openssl-1-1-1h-binary-distribution-for-windows#2.-Download-OpenSSL-3.0-Windows-Installer

 

4. Visual Studio 2015 버전 이상

(Connector 버전에 따라 필요한 컴파일러 버전이 다르니 MYSQL 공식 홈페이지 참고)

https://visualstudio.microsoft.com/ko/downloads/

 

5. Boost Library

https://www.boost.org/users/download/

 

6. MYSQL Server

 

7. MYSQL Connector C Source

Debug를 빌드하기 위해 libmysql.dll, libmysql.lib, mysqlclient.lib가 필요하다.

Release는 MYSQL Server에 포함되어 있는걸로 사용 가능한 것 같다.

 

 

 

 

그저 다른 라이브러리 처럼 CMake에서 Configure 실행하면 실패한다.

MYSQL은 OpenSSL 라이브러리가 필요하기 때문에 아래의 옵션을 꼭 추가해서 생성해야한다.

이거 알아내려고 삽질을 좀 했다.

 

 

주의할점은 Windows라고 해서 경로를 \로 작성하지 말자.

못 찾는다. /로 작성하자. 그럼 끝이다.

 

 

 

 

 

MYSQL 빌드시 에러 대처

 

1. error LNK2001: 확인할 수 없는 외부 기호 __iob_func()

-> VS 2015 버전 이후로 해당 함수들이 함수 포인터를 넘겨주던 방식에서 함수 포인터를 넘겨주는 방식으로 변경됨

#define stdin (&__iob_func()[0])

#define stdout (&__iob_func()[1])

#define stderr (&__iob_func()[2])

=>

#define stdin (__acrt_iob_func(0))

#define stdout (__acrt_iob_func(1))

#define stderr (__acrt_iob_func(2))

 

해결 방법은 여러가지가 있다.

 - __iob_func()를 직접 구현한다.

- stdio 함수 링크인 경우엔 legacy_stdio_definitions.lib를 종속성에 추가한다. => 이걸로 함

 

 

 

 

혹시 프로젝트 설정을 바꿔야 하는 경우 생성된 프로젝트에서 바꾸지말고 전부 삭제한 뒤 다시 CMake로 만들어야 에러가 안나는듯 하다..

 

 

 

참조한 사이트

https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-source-configuration-options.html

https://m.blog.naver.com/gur0/222036146658

https://zh.wikibooks.org/zh-hant/MySQL_Connector/C%2B%2B

https://stackoverflow.com/questions/32947365/runtime-error-with-debug-build-of-project-using-mysql-connector-c

https://forums.mysql.com/read.php?167,669925,671603#msg-671603

https://blog.csdn.net/fksec/article/details/25872389

https://catwolf.org/qs?id=b6d60b91-8781-4911-af19-5352f2f4def1&x=y 

https://www.cnblogs.com/TTaiAL/p/6912600.html

https://full-way.rssing.com/chan-1174357/all_p21.html

 

 

320x100

'DB > MYSQL' 카테고리의 다른 글

SELECT FOR UPDATE  (0) 2022.10.20
DB Link  (0) 2022.08.31
C++ Connector 사용시 conntect 함수에서 std::bad_alloc 발생  (0) 2022.05.13
LAST_INSERT_ID() 사용 시 주의할 점  (0) 2022.01.07
테이블, 컬럼 언어 변경하기  (0) 2021.12.29