개발도구는 Sun Studio 12.1 로 해 보자(NetBeans 6.8도 가능)
개발을 위한 컴파일러는 gcc 4.1* 이상이어야 한다.

우선 mongoDB 다운로드 & 설치
- www.mongodb.org 에서 mongodb binary 또는 소스를 받아서 설치한다
- 소스 설치시는 의존성에 걸리는 빌드도구들을 여러가지 받아서 설치해야한다. 특히 scons 가 필수인데
   Ubuntu, centOS에서는 숫한 삽질을 통해 scons 소스를 컴파일해서 빌드한 기억이 난다.
   우여곡절 끝에 mongodb를 다음과 같이 빌드할 수 있다
   # scons --prefix /usr/service/mongo install
- mongodb 는 rpm 같은 패키징이 없이 tar.gz binary 압축해제/복사 또는 source 컴파일후 위에서 처럼 빌드, 설치
  2가지중 하나를 선택해야 한다.

mongodb 를 사용하는 프로그램을 컴파일 하기 위해서 필수적인 라이브러리가 바로 c++ boost library이다.
CentOS에서는 yum install boost, yum install boost-devel 로 설치할 수는 있지만
아쉽게도 boost 버전이 1.33이라 mongo 어플리케이션을 컴파일할 수가 없다. 그렇다면? boost 소스를 다운받아서
직접 빌드하고 설치해야 한다(이 때도 숫한 삽질이 수반된다). 결론은 Cent에서 mongodb app 개발은 상당한
인내심을 길러주는 극기 훈련이 될테니 마음 단단히 먹기 바란다.
특히 CentOS는 패키지 다운로드를 통해서 받아오는 MySQL이나 boost 등의 어플리케이션들이 상당히
구닥다리들이 많다는 점에 주의 !!

Ubuntu 에서는 그나마 상대적으로 쉬운 편인데 반드시 boost 1.38.1 이상을 설치해줘야 한다.

OpenSUSE 에서는 상당히 간편하게 mongodb 개발이 가능하다. YaST에서 최신버전의 boost 를
받아서 설치해주면 된다. gcc(g++4.4)와 boost 1.40이 설치될 것이다. 잘 모르겠으면 속편하게 소프트웨어
설치에서 왠만한 개발 도구와라이브러리들을 슥슥 선택해서 좌악 깔아주면 된다.

사이트의 샘플 소스를 Copy&Paste 해서 테스트 프로그램을 편집하였다고 하자.
#include <iostream>
#include "client/dbclient.h"

using namespace mongo;

void run() {
  DBClientConnection c;
  c.connect("localhost");
}

int main() {
  try {
    run();
    cout << "connected ok" << endl;
  } catch( DBException &e ) {
    cout << "caught " << e.what() << endl;
  }
  return 0;
}

커맨드라인에서라면 애래와 같이 컴파일 & 빌드를 수행하면 된다.
# g++ mongotest.cc -lmongoclient -lboost_thread-mt -lboost_filesystem -lboost_system-mt -o mongotest
여기서 libmongoclient.a, libboost_thread-mt.so libboost_filesystem.so libboost_system-mt.so 등이 적절히
설치되고 -L 옵션등으로 지정해주거나 LD_LIBRARY_PATH에 추가 하는 등의 작업이 필요함은 물론이다
(플랫폼에 따라 libboost_filesystem-mt.so로 해야 할 수도 있다).

SunStudio 내에서 컴파일&빌드 하려 한다면
Sunstudio 메뉴에서 Tools>Option>C/C++ 설정으로 가서 GNU를 default 로지정하고 저장한다.
Project Properties 에서 컴파일러 옵션에서 Additional Include 디렉토리를 mongodb include 디렉토리로 지정
링크 옵션에서 Add Library로 libmongoclient.a와 boost shared library 3개를 모두 추가하여 야 한다.


저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들

Tag boost, C++, mongodb

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에서 빌드/실행하면 훌륭하게 동작 한다.
저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


CD1장으로 된 Ubuntu desktop 버전은 Linux를 간편하게 사용하게 만들어진 패키지여서
개발툴, 환경, 라이브러리들이 자동으로 설치/설정되지는 않는다.

더구나 Eclipse(Galileo 라는 코드명을 가졌던가...아무튼) cdt는 ubuntu의 synaptic 관리자에서도 더 이상 패키지
설치목록에 뜨지 않게 바뀌어 버렸다.

Eclipse cdt(C, C++ Development Toolkit ? ...)을 사용하려면
우선 eclipse 최신 버전을 synaptic 관리자를 통해서 설치한다
(추가로 설치가 필요하다고 마킹된 것들 중에서 pde는 반드시 설치, jde는 java 개발을 하지 않는다면 필요 없을 듯)

다음 eclipse를 실행한 후에 아래의 절차에 따라 설치한다.

- Help 메뉴에서 "Install New Software" 선택
- Install 팝업창에서 Add 버튼 클릭
- Name에 Galileo 하고 넣고 URL에 http://download.eclipse.org/tools/cdt/releases/galileo 를 붙여넣고 OK


- 다시 Install 창에서 CDT Main, CDT Optional Features 를 선택(왼만하면 설치해 놓고 나중에 지우던지 아니면 Main만 설치)하고 Next
- 필요한 패키지가 없다고 오류가 뜰텐데, Remote Launch 부터 아래에 있는 것들 모두 제외하자
- 다시 Next 하면 설치 가능 목록이 뜨고, Next
- Accept ...License agreement 에 체크하고 Finish

* 혹시 설치 도중 아래와 같은 오류가 발생한다면 eclipse pde가 설치되지 않은 것이니 반드시 설치하고 다시 돌아와서 계속하자
  session context was:(profile=PlatformProfile, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Install, operand=null --> [R]org.eclipse.ant.ui 3.4.1.v20090901_r351, action=org.eclipse.equinox.internal.p2.touchpoint.eclipse.actions.InstallBundleAction).
  The artifact file for osgi.bundle,org.eclipse.ant.ui,3.4.1.v20090901_r351 was not found.

설치 진행 창이 팝업되고 설치가 자동으로 시작된다(다운로드/설치에 몇 분 시간이 걸린다). 설치가 완료되면

Ubuntu desktop의 상단 메뉴 프로그램>개발>eclipse 를 클릭하면
Eclipse SDK 워크벤치를 실행시키고 프로그램 개발에 들어갈 수 있다.

저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들