대부분의 boost 라이브러리는 원하는 기능의 헤더 파일을 포함하면 사용할 수 있지만 OS의 기능을 사용하는 것들은 빌드를 해야한다.
- boost 라이브러리(여기서는 1.50)을 다운로드 한다
- 'E:\Dev\CommonLib\boost_1_50_0' 디렉토리에 압축을 푼다.
- 먼저 빌드 실행 파일을 만들기 위해서 위의 디렉토리에서 bootstrap.bat 를 실행한다.
- 디렉토리에 b2.exe와 bjam.exe 파일 두개가 만들어졌다. 이중 bjam.exe를 사용하여 빌드를 하겠다. 참고로 예전에는 bjam.exe를 사용 하였으나 근래에는 b2.exe로 넘어가는 추세이다.
옵션으로 디렉토리를 지정하지 않으면 라이브러리 파일은 stage\lib 디렉토리에 생성된다.
- 위의 방식으로 하면 '런타임 라이브러리 정적 링크' 라이브러리(빌드 후 만들어지는 lib 파일에 -sgd 가 붙는)가 만들어 지지 않는다. 그래서 다시 b2.exe 파일을 사용하여 빌드를 했다.
- b2.exe 명령어를 사용할 때 옵션으로 -prefix (빌드 라이브러리가 생성될 디렉토리)를 붙이지 않으면 이상한 곳에 만들어질 수 있으니 꼭 붙여야 한다. 나는 stage/lib 디렉토리에 만들어지게 하고 싶어서 다음과 같이 했다.
b2 -prefix=.\stage\lib --toolset=msvc runtime-link=static
예)
VS 2005 /MT, /MTd b2 -prefix=.\stage\lib --toolset=msvc-8.0 runtime-link=static /MD, /MDd b2 -prefix=.\stage\lib --toolset=msvc-8.0 runtime-link=shared
VS 2012 /MT, /MTd b2 --stagedir=stage --toolset=msvc-11.0 runtime-link=static /MD, /MDd b2 --stagedir=stage --toolset=msvc-11.0 runtime-link=shared 64비트 /MT, /MTd b2 --stagedir=stage64 address-model=64 --toolset=msvc-11.0 runtime-link=static /MD, /MDd b2 --stagedir=stage64 address-model=64 --toolset=msvc-11.0 runtime-link=shared
- VC용으로 이미 빌드된 Boost 라이브러리 Lib 파일을 얻을 수 있다.
- 위치는 http://sourceforge.net/projects/boost/files/boost-binaries/ 이다.
- 다양한 Boost 라이브러리 버전 및 VC 버전별로 준비 되어 있다.
- http://warmz.tistory.com/904 의 Mac에서 빌드 방법을 참고했다.
- Boost 라이브러리 다운로드 후 압축 풀기
- 터미널에서 압축을 푼 디렉토리로 이동 후 아래처럼 입력 $ ./bootstrap.sh
- 생성된 b2를 사용하여 Boost 라이브러리 빌드하기 $ ./b2 toolset=gcc link=static threading=multi address-model=64
빌드가 끝나면 Boost 라이브러리 디렉토리 안의 stage/lib 디렉토리에 빌드 릴리즈용 lib 파일 생성.
./b2 toolset=gcc link=static threading=multi address-model=64 variant=debug ./b2 toolset=gcc link=static threading=multi address-model=64 variant=release
- 출처: https://sites.google.com/site/boostjp/howtobuild
- toolset
하나의 머신에 서로 다른 종류의 컴파일러가 인스톨 되어 있는 경우는 toolset 명령어로 지정할 수 있다. 예를 들면: borland : Borland사의 컴파일러 dmc : Digital Mars사의 컴파일러 darwin : Apple에서 손을 댄 gcc 컴파일러(Mac OS) gcc : GNU 프로젝트에 의한 컴파일러 intel : Intel사 컴파이럴 msvc : Microsoft사 컴파일러
로 지정할 수 있다. msvc-9.0 (Visual C++ 2008), msvc-10.0 (Visual C++ 2010)와 같이 버전 지정도 할 수 있다.
- link
- 이것은 static, shared 라이브러리를 만들지를 지정하는 명령어
- link=static,shared 와 같이 사용한다.
lib, dll (Windows) a, dylib (Mac OSX) a, so (Other Systems) 와 같은 라이브러리 파일을 생성한다.
-
threading
- multi: 멀티 스레드 라이브러리 생성
- single: 싱글 스레드 라이브러리 생성.
-
variant
- debug: 디버그 빌드를 생성
- release: 릴리즈 빌드를 생성
./b2 toolset=clang linkflags="-stdlib=libc++" cxxflags="-std=c++11 -stdlib=libc++"
- Boost 라이브러리는 home에서 아래의 디렉토리에 설치
- Boost 라이브러리를 빌드하여 debug, release 각각 만든다(정적 라이브러리).
- tesp.cpp와 Makefile을 TestCppBoost 디렉토리에 생성
- 소스코드, Makefile
- 빌드 후 실행
리눅스에서는 기본 옵션이 아래처럼 된다.
link=static,shared threading=multi variant=release
본인은 아래와 같이 빌드했다. (OpenSUSE가 64비트라 그런지 기본으로 64비트로 빌드 되었다.
./bootstrap.sh ./b2 toolset=clang link=static,shared cxxflags="-std=c++11 -stdlib=libstdc++" linkflags="-stdlib=libstdc++" threading=multi
- 소스 코드: hello-boost.cpp
#include <boost/regex.hpp>
#include <iostream>
#include <string>
int main()
{
std::string line;
boost::regex pat("^Subject: (Re: |Aw:)*(.*)");
while(std::cin)
{
std::getline(std::cin, line);
boost::smatch matches;
if(boost::regex_match(line, matches, pat))
std::cout << matches[2] << std::endl;
}
return 0;
}
- Makefile
CXX=clang++
CXXFLAGS=-I/home/dev/Dev/C++/boost
LDFLAGS=-L/home/dev/Dev/C++/boost/stage/lib
LDLIBS=-lboost_regex
all:hello-boost
clean:
rm -rf hello-boost
rm -rf *.o
- 리눅스 플랫폼에서 C++ 프로그래밍을 쉽게 하는 방법은 Eclipse라는 IDE를 사용하면 좋다. 그러나 VS를 사용했던 프로그래머로서는 사용해 보면 초반부터 간단한 부분에서 막혀서 스트레스를 받는데 이중 몇 가지를 기록 차원에서 간단하게 정리한다. 로젝트 설정을 위해서는 아래의 설정 창을 열어야 한다.
- C++11 사용하기. 아래 처럼 -std=c++11 을 입력한다(참고로 gcc 4.8 사용)
- 외부 해더 파일 설정
- 외부 lib 파일 설정
- 여기서 주의할 점은 아래와 같이 이름이 libboost_reggex.a 라는 lib 파일을 설정에 등록할 때는 앞의 'lib'과 뒤의 '.a'를 제외하고 입력해야 한다.
- std::thread 사용. 아래처럼 '-pthread' 를 입력한다.
예전에는 Windows의 개발자가 Linux에서 C++ 프로그램을 개발하는 것이 쉽지 않았다. 쉽지 않은 이유는 Visual C++과 같은 툴이 없기 때문이었다.
그러나 요즘은 이클립스나 KDevelop, MonoDevelop를 사용할 수 있어서 예전 보다 엄청 좋아졌다.
MonoDevelop를 사용하여 Boost 라이브러리의 thread 라이브러리를 사용한 C++ 프로그램을 빌드하는 방법을 간단하게 설명한다.
컴파일러는 g++을 사용하고, Boost 라이브러리는 빌드 된 상태이다.
MonoDevelop를 사용하여 C++ 프로젝트를 만든 후 아래의 코드를 코딩한다.
아래 그림의 팝업 메뉴에서 'Option'을 선택하여 프로젝트 설정을 한다.
Boost 라이브러리의 헤더 파일과 lib 파일의 디렉토리를 추가한다
스레드를 사용하므로 옵션으로 -pthread 를 추가한다
이제 빌드하면 된다!!!
BOOST_COMPILER 라는 지시어를 사용하면 컴파일러 종류와 버전을 알려줍니다.
#include <iostream>
#include <boost/config.hpp>
int main()
{
std::cout << BOOST_COMPILER << std::endl;
return 0;
}
- Boost 라이브러리 빌드 및 설치 - VC++ (VS2012, Boost 1.53)
- boost 간단 설치기 (Windows환경) - VS 2010 중심
- Boost 64비트로 빌드하기
- VS2008에서 Boost 빌드하기
https://sites.google.com/site/boostjp/howtobuild
VC9까지는 '도구' – '옵션' 메뉴를 통해서 VC++ 디렉토리를 설정하였습니다.
이렇게 설정한 정보는 모든 VC++ 프로젝트에 적용됩니다.
그러나 VC10부터는 각 프로젝트 별로 VC++ 디렉토리를 설정합니다.
각 프로젝트 마다 독립적으로 설정을 할 수 있어서 편한 부분도 있지만 때로는 모든 프로젝트에 공통적으로 적용되어야 하는 경우는 매번 설정하는 것이 귀찮을 수 있습니다. (예로 DirectX나 boost 라이브러리 등) 이런 경우 '속성 매니저'를 통해서 VC++ 디렉토리를 설정하면 모든 프로젝트에 공통적으로 적용할 수 있습니다.
- 일단 아무 프로젝트 하나를 열어 놓습니다.
- 메뉴의 '보기' -> '속성 관리자'를 선택합니다.
- 속성 관리자에서 'Microsoft.Cpp.Win32.user'를 더블 클릭해서 열어 놓습니다.