본문 바로가기

Robotics/Software Tech.

MySQL 5.5.9 와 MFC 연동


지난주부터 MySQL과 C++을 연동해서 프로그램을 하나 만들어 보려고 하는데, MySQL을 처음 접해보는 나로써는 처음에 어떻게 접근해야할지부터 고민해야 했다. 처음에는 그냥 직접 데이터베이스 구조를 만들어 볼까 했는데.. 바보같은 짓이었다. 그냥 메모리 구조를 잡아놓고 메모리에 저장하는것은 관계없었지만, 파일로 저장해놓을려고 하니.. 내가 원하는 데이터를 검색하는 것부터 정렬하는게 만만치 않았다. 처음부터 만들어 보려고 했던이유는, 이런게 있다는 것은 알고 있어도, 이것을 내가 얼마만큼 활용할 수 있고, 어떻게 활용하는지 잘 아는가의 문제였다. 처음부터 배우는것에 대한 두려움이랄까... 그런것도 있었고...

기존에 하던것을 멈추고. MySQL로 구성할 수 있는 방법을 찾아봤고, 어느정도 시도해 볼만하다는 결론을 낸 후에야 나의 Linux machine에다가 MySQL 최신버젼을 깔았다. 그리고, 인터넷을 서칭해서 데이터베이스를 만들고, 테이블을 생성하고 데이터를 입력하고, 내가 원하는 데이터를 추출할 수 있는 방법을 터득하고 난뒤에야.. 요거 쓸만하네.. 라는 Feel을 받았다.

그리고, MySQL과 다른 언어로 구성된 프로그램과 연동할 수 있도록 Connector를 제공한다는 사실을 알고, 내 Windows machine에 설치를 했다. 일단 C와 C++ Connector를 설치했다. 자.. 이제 어떻게 하지? 궁금하면 바로 찾아봐야 한다.

인터넷을 또 뒤졌다.

매뉴얼과 여러 블로거들의 글이 검색됐다. 방법을 아는것은 어렵지 않았다. C Connector의 경우, 내 프로그램에 쉽게 붙일 수 있었고, 내 리눅스 머신과 연동되어서 데이터베이스에서 내가 원하는 값을 얻어오도록 하는 query만 던져주면 잘 받아왔다. linux 머신은 연구실에 고정 IP로 할당된 서버이고, windows는 클라이언트로 가상IP를 사용한다.

이제 이것을 연구실 SVN에 커밋하고 내 노트북으로 틈틈히 작업을 하려고 했는데..
어랏? 노트북에서는 링크 에러가 난다. 다른건 노트북은 64bit이고 데탑은 32bit라는 것 차이뿐...

sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_free_result@4 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_fetch_row@4 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_store_result@4 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_query@8 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_error@4 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_real_connect@32 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_init@4 referenced in function "public: __thiscall sqlDatabase::sqlDatabase(void)" (??0sqlDatabase@@QAE@XZ)
4>sqlDatabase.obj : error LNK2019: unresolved external symbol _mysql_close@4 referenced in function "public: virtual __thiscall sqlDatabase::~sqlDatabase(void)" (??1sqlDatabase@@UAE@XZ)

이건 링크할 lib를 못찾아서 나오는 오류인데.. 분명 코드 상단에

#pragma comment(lib, "libmysql.lib") 라고 넣어줬는데도 그렇다.. (당연히 direcotry설정도 해줬고..)

이유를 알수 없다..

그리고, 검색하다가 안 사실인데, c++ connector는 vvisual studio 2008에서 동적라이브러리와 정적 라이브러리에 차이가 있는 모양이다.. 앞으로 c++ connector를 붙일때 삽질하지 않도록 주의해야 할 듯..



---------------------------------------------

이유를 알았다. 이 글을 적자마자 혹시나 해서 해봤는데.. 된다..
일단 32bit 윈도우 머신에서는 MySQL의 lib directory를 opt로 지정해놓고 debug모드로 빌드해도 괜찮았었는데..
64bit 윈도우 머신에서는 MySQL의 lib directory를 디버그 모드로 빌드할때는 debug 폴더를 지정해야 한다는 것이다.
사실 32bit에서도 디버그 모드에서 빌드 할 경우라면 debug 폴더를 지정해 놔야 할 것같다...

삽질 그만...