본문 바로가기

Technical/Development

Ubuntu 9.10에서 MySQL Connector/C++ 프로그램 개발


NetBeans 6.8 에서 C++을 통하여 MySQL을 다루기 위해 Connector C++을 사용하기로 하였다.
처음부터 쉬운 길을 택한 것에 대한 징벌인가 ㅡ_-;; 샘플 소스 받고 빌드 하니
ld 에서 오류가 떨어진다...엉뚱한 버전의 라이브러리를 찾고 난리도 아니다.

Binary 버전(Redhat, SUSE, Max OSX, FreeBSD, Windows 용 다 있는데 Karmic 용은 없네...generic 을 받을 수 밖에...)을
다운로드 받고 tar로 압축 풀고 /usr/include, /usr/lib 에 적당히 복사하고
Library link 정보까지 깔끔하게 업데이트 하기 위해 ldconfig 까지 돌렸는데;;; 안된다.

구글링을 해 보니, MySQL Connector C++ binary는 glibc-2.3 을 통해 컴파일된 거라서 Generic 으로 Binary를 복사 설치할 경우
링크단계에서 잘 넘어가면 기적이지 싶다. 2.3 버전이면 몇년 전거냐...지금 glibc-2.9 가 돌아가는 시대 아닌가.
거기다가 c++은 namespace 를 민감하게 따져서 이런 일이 많이 생기지 싶다.

해결을 위해 두번째 삽질에 들어간다. MySQL Connector/C++ 소스를 자체적으로 컴파일해서 설치에 성공하면 끝이다.
소스 받고, 압축 풀고 설치하려니...cmake로 돌려야 된다 ㅡ_-;; 유명한 Platform independant Cross maker !!!
Synaptic Package manager로 cmake 설치하고
대망의...cmake

> sudo cmake .
> sudo make clean (옳지! 잘 된다)
> sudo make (Shieeeeet 오류 뜬다)

.../mysql_art_resultset.cpp: snprintf was not declared in this scope 어쩌구...

namespace 관련 버그 같은데 몇년 동안 아직 그대로인가...제공된 소스를 직접 뜯어 고쳐야 한다.

.../mysql_art_resultset.cpp
.../mysql_resultbind.cpp
.../test/unit/classes/resultsetmetadata.cpp

위의 3개 파일을 모두 에디터로 열어서 첫 번째 라인에 아래의 include 문을 추가한다.

#include <cstdio>

이제 마무리

> sudo make
> sudo make install

이제 Netbeans에서 빌드/실행하면 훌륭하게 동작 한다.