스크립트 바인딩은 스크립트 언어에서 C++ API에 접근하는 방법을 제공한다. 보통 C++ 클래스와 함수를 감싸는 래퍼(wrapper) 코드를 만든 후에 각각의 언어에서 모듈을 로딩하는 기능을 이용하여 C++ API에 접근할 수 있다.
그럼 여기서는 Boost Python을 이용하여 python을 위한 C++ API 바인딩 기법을 소개한다.
Boost Python은 C++라이브러리이고 boost안에 존재한다. 그렇기 때문에 boost 라이브러리가 필요하다.
소스 다운로드 및 자세한 정보는 http://www.boost.org/ 이곳을 참고하길 바란다.
참고로 윈도우즈 환경에서 비주얼 스튜디오를 이용하여 진행하였다. 그리고 파이썬3.4가 설치된 상태에서 진행하였다.
boost 라이브러리를 다운받고 적절한 곳에 압축을 푼다. 아래와 같이 압축을 풀었다.
C:Boostboost_1_63_0 |
이제 boost를 빌드해야 하는데 빌드는 비교적 쉽다. 윈도우 명령 프롬프트를 열어 boost 디렉터리로 이동한다.
먼저 bootstrap.bat를 실행한다.
C:Boostboost_1_63_0>bootstrap.bat |
잠시 후 b2.exe 및 project-config.jam 파일들이 만들어 진다.
project-config.jam 파일을 편집기로 열어 아래처럼 python 버전 및 경로를 명시한다.
import option ; |
이제 b2를 실행하여 빌드 진행을 한다. 아래처럼 타이핑한다.
C:Boostboost_1_63_0>b2 --toolset=msvc-12.0 --build-type=complete architecture=x86 stage |
그러면 빌드가 진행되고 잠시 후 라이브러리들이 빌드가 완료되면 stage/lib 디렉터리안에 deploy된 것을 확인 할 수 있다.
이제 visual studio를 열어 일반-> 빈프로젝트를 생성한다.
프로젝트에 아래 소스들을 추가 시킨다. C++ API디자인의 간단한 예제를 첨부하였다.
그리고 프로젝트 속성을 열어서 몇가지 설정을 해주어야 한다. 먼저 동적라이브러리(dll)을 선택하고 일반의 대상 확장명에는 dll을 pyd로 바꿔준다.
C/C++의 일반에 추가 포함 디렉터리에 아래와 같이 python과 boost의 경로를 추가 시켜준다.
다음은 링커의 추가 라이브러리 디렉터리에 python과 boost의 라이브러리 경로를 추가 시킨다.
설정 완료후 예제를 빌드하면 "phonebook.pyd" 라이브러리 파일(모듈)이 만들어 지고 이를 복사하여 python이 설치된 DLLs 디렉터리에 복사한다. (이 경로는 파이썬이 기본적으로 모듈을 찾는 경로이다.) 그리고 또한가지 boost 라이브러리 도 복사해 주어야 하는데 boost 라이브러리가 있는 stage/lib 디렉터리에서 "boost_python-vc120-mt-gd-1_63.dll" 역시 DLLs 디렉터리에 복사해 준다.
이제 파이썬 스트립트에서
import phonebook
위와같이 import를 통해 C++ API를 이용할 수 있다.
아래는 IDLE에서 phonebook을 추가하고 해당 객체를 생성하여 person 객체를 추가하거나 삭제하는 예제를 보여준다.
많은 도움이 되었습니다. 감사합니다.