자바는 하드웨어 접근이 원칙적으로 통제되어 있으므로 표준 API에서 지원하지 않는 기능을 사용하기 위해서는 네이티브 바이너리에 직접 접근해야만 한다. 이 제한은 플랫폼 독립적이어야 하는 자바의 원칙을 깨는 것이므로, 자바가 좀 더 많은 일을 할 수 있게 하기 위해 표준 API안에 개발에 필요한 가능한한 많은 기능들을 제공해야 했다. 덕분에 자바 개발자들은 네트워킹, 쓰레드, DB접근, GUI등 애플리케이션 개발에 필수적인 요소들에 객체지향적으로 잘 설계된 방대한 라이브러리를 자유롭게 사용할 수 있다.

 반면에, C++은 언어와 API가 별개이다. C++에서는 시스템에 관련된 API는 플랫폼 개발자가 제공하는 것이 원칙이므로, 플랫폼 독립적인 방법을 제공하기 위해 표준 API의 어휘를 늘리는 것에 적극적이지 않았다. 그 결과 iostream과 stl을 제외하자면 객체지향으로 설계된 API가 없는 거나 다름없는 빈약한 언어가 되었고, 나머지는 모두 플랫폼 개발자가 제공하는 라이브러리에 의존해야 했다.

 C++로 응용프로그램을 개발할 때, 사소하지만 빈번하게 사용되는 유틸리티들마저 부족한 것은 큰 문제이다. 달력이나 유리수 표현과 같은 유틸리티는 어지간한 입문서에서 단골로 다룰 만큼 작은 라이브러리지만, 표준이 없으므로 필요할 때마다 계속 "바퀴를 다시 발명하여"사용해야만 한다.

 boost는 이런 문제의식을 배경으로, 범용으로 빈번하게 사용되는 작은 유틸리티들을 제공하려는 프로젝트이다. 그래프, 쓰레기 수집 기능을 가진 포인터, 파일시스템, 수학 연산들, 쓰레드, 스캐너와 LL파서 등 유용한 기능을 가진 라이브러리들을 많이 확보하고 있다.

 boost는 다섯 달에 한 번 꼴로 버전업이 이루어지는데, 매 버전업마다 많은 라이브러리가 추가된다. 진보적인 C++문법을 사용하는 관계로 컴파일러와 플랫폼에 따라 성공적으로 컴파일되지 않는 라이브러리가 있을 수 있으니 테스트 결과를 참고해서 사용해야 한다. 지속적으로 포팅이 이루어지고 있으니 컴파일 실패율은 계속 낮아질 것으로 보인다. 너무 활발하게 진행되는 프로젝트이다 보니 버전업이 되면서 하위호환성이 보장되지 않는 경우가 있으므로 주의해야 한다.

boost 공식 사이트: http://www.boost.org/


1. boost 설치
 boost library는 c++의 template를 이용한 구현이 많은데, 이러한 기능들은 *.lib파일이 필요없이 헤더파일(*.hpp)만 있으면 사용할수 있다.(c++의 template는 선언과 구현을 헤더파일와 구현파일로 구분하는 것을 허용하지 않기 때문에, 선언과 구현이 모두 hpp 파일안에 존재한다.) boost는 또한 컴파일이 필요한 라이브러리를 제공하며 선택으로 빌드하여 사용할 수 있다.

boost의 설치를 손쉽게 해주는 툴이 아래 사이트에서 제공된다.


위 사이트에서 제공하는 boost 최신 버전 설치파일을 다운로드한다.

다운로드받은 파일을 실행해 사용하는 Visual Studio의 버전에 따라 아래와 같은 순서로 boost를 설칠할수 있다.

boost에서 제공하는 많은 컴포넌트(컴파일이 필요한)를 필요에 따라 선택해 설치할수 있다.


설치를 성공적으로 마치면 아래 그림과 같이 inclide디렉터리(boost 디렉터리)와 lib디렉터리를 확인할수 있다.


위 그림처럼 include 디렉터리에는 hpp파일들이 기능에 따라 정리되어 세부 디렉터리에 저장되어 있다.
asio 관련 파일을 링크시키자 한다면 #include <boost/asio/ssl.hpp>와 같이 링크할수 있다.


위 그림처럼 lib 디렉터리에는 컴파일된 lib파일이 있다.


2. 네이밍
lib파일들은 mt, gd와 같은 prefix가 붙는데 boost library에 대한 네이밍 규칙은 다음과 같다.

lib
MS Windows 플랫폼을 제외하고 모든 boost라이브러리는 이 string으로 시작된다. 단, MS Windows에서는 static library만 해당 prefix를 사용한다.

boost_regx
라이브러리 이름으로 모든 boost라이브러리의 파일명은 boost_ 로 시작된다.

-vc90
boost를 빅하는데 사용된 툴과 버전을 알려준다.

-mt
라이브러리가 멀티쓰레딩을 지원하는지 알려준다. -mt는 멀티쓰레딩을 지원하도록 빌드됬음을 의미힌다.

-d
빌드 옵션에 따라, 아래와 같은 추가 문자가 붙거나 빠진다.

 Key  Use this library when:
 s  linking statically to the C++ standard library and compiler runtime support libraries. 
 g  using debug versions of the standard and runtime support libraries.
 y  using a special debug build of Python.
 d  building a debug version of your code.
 p  using the STLPort standard library rather than the default one supplied with your compiler.
 n  using STLPort's deprecated “native iostreams” feature.8

-1_42
boost의 버전명.

'프로그래밍 > 오픈소스' 카테고리의 다른 글

spring-data에서 redis 사용하기  (0) 2012.12.06
Hibernate @NotFound 어노테이션  (0) 2012.12.05
이클립스에 GlassFish 설치하기  (0) 2011.02.17
SQLite with Eclipse  (1) 2010.05.06
SWF파일 분석 도구  (0) 2010.04.13
boost library 설치  (0) 2010.03.17
libcurl 사용하기  (0) 2010.03.15
SQLite  (3) 2009.09.11
ACE(ADAPTIVE Communication Environment)  (0) 2009.09.03
MySQL++  (0) 2009.08.21
C++ 암복호화 라이브러리 Crypto++  (0) 2009.08.20
Posted by devop

댓글을 달아 주세요