조회 수 22231 추천 수 0 댓글 5
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

스크립트 바인딩은 스크립트 언어에서 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 ;
 
using msvc ;

#  Python configuration
using python : 3.4 : C:\python34 :  :  : <address-model>64 ;
 
option.set keep-going : false ; 

 

이제 b2를 실행하여 빌드 진행을 한다. 아래처럼 타이핑한다.

C:Boostboost_1_63_0>b2 --toolset=msvc-12.0 --build-type=complete architecture=x86 stage

 

그러면 빌드가 진행되고 잠시 후 라이브러리들이 빌드가 완료되면 stage/lib 디렉터리안에 deploy된 것을 확인 할 수 있다.

K-003.png

 

이제 visual studio를 열어 일반-> 빈프로젝트를 생성한다.

 

프로젝트에 아래 소스들을 추가 시킨다. C++ API디자인의 간단한 예제를 첨부하였다.

phonebook.cpp

phonebook_wrap.cpp

phonebook.h

 

그리고 프로젝트 속성을 열어서 몇가지 설정을 해주어야 한다.  먼저 동적라이브러리(dll)을 선택하고 일반의 대상 확장명에는 dll을 pyd로 바꿔준다. 

K-005.png

 

C/C++의 일반에 추가 포함 디렉터리에 아래와 같이 python과 boost의 경로를 추가 시켜준다.

K-006.png

 

다음은 링커의 추가 라이브러리 디렉터리에 python과 boost의 라이브러리 경로를 추가 시킨다.

K-007.png

 

설정 완료후 예제를 빌드하면 "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 객체를 추가하거나 삭제하는 예제를 보여준다.

K-008.png

 

  • ?
    x2ever 2018.11.05 20:41

    많은 도움이 되었습니다. 감사합니다.

  • ?
    운영자 2018.11.07 21:55

    네~ 댓글 감사합니다 ^^

  • ?
    무누야무누 2019.06.04 00:19

    정말 감사합니다! 학교에서 과제중인데 C++ 파일을 Python에서 구동하려고 했는데 감사합니다. 또 궁금한거 있으면 쪽지 드려도 괜찮을까요??

  • ?
    makersweb 2019.06.04 10:19

    댓글 남겨주시면 아는데까지 도움 드릴게요~

  • ?
    mystark 2019.11.21 18:55

    구글링하면서 자료를 찾고 있었는데 정말 좋은 자료를 찾았네요. 감사합니다


  1. No Image

    pybind11 에 대해서

    Date2023.07.23 CategoryGeneral Bymakersweb Views10255
    Read More
  2. Qt For Python(PySide2) QML 프로젝트 예제

    Date2019.10.17 CategoryBeginner Bymakersweb Views16528
    Read More
  3. 명령어 한줄로 내컴퓨터를 웹서버로

    Date2019.01.25 CategoryGeneral By운영자 Views9807
    Read More
  4. pydbus 바인딩을 이용하여 서비스 데몬과 D-Bus통신

    Date2018.03.12 Bymakersweb Views12329
    Read More
  5. Boost Python을 이용하여 python을 위한 C++ API 바인딩

    Date2017.01.08 Bymakersweb Views22231
    Read More
  6. No Image

    [Python]EXE또는 DLL파일의 버전정보를 알아내기위한 몇가지 방법

    Date2015.06.25 Bymakersweb Views16939
    Read More
  7. QML 및 Window 투명처리

    Date2015.04.22 CategoryPyQt4 Bymakersweb Views8750
    Read More
  8. No Image

    [pyqt4]QTimer 예제 - 버튼을 누르면 3초후 함수 또는 메소드 호출

    Date2015.04.01 CategoryPyQt4 Bymakersweb Views13601
    Read More
  9. No Image

    Python + QML with PyQt4

    Date2015.03.24 CategoryPyQt4 Bymakersweb Views14754
    Read More
  10. No Image

    print를 로그파일로 생성하기 (log출력 Redirection)

    Date2015.03.18 CategoryGeneral Bymakersweb Views14189
    Read More
  11. No Image

    외부 프로그램 실행

    Date2015.02.10 CategoryGeneral Bypjk Views25663
    Read More
  12. No Image

    우분투에 Python새 버전 설치 사용법

    Date2015.02.10 CategoryGeneral Bypjk Views12845
    Read More
  13. No Image

    How to Use Freeze

    Date2014.09.06 Bypjk Views13610
    Read More
  14. No Image

    [PyQt4]개발 프로그램 버전표시 메세지 박스

    Date2014.09.02 CategoryPyQt4 Bypjk Views16312
    Read More
  15. [PyQt4]여러가지 버튼 예제

    Date2014.08.29 CategoryPyQt4 Bypjk Views31233
    Read More
  16. No Image

    Python 문자열 관련 함수 레퍼런스

    Date2014.08.29 CategoryGeneral Bypjk Views12617
    Read More
  17. [PyQt4]스레드 및 ProgressBar 예제 코드

    Date2014.08.26 CategoryPyQt4 Bypjk Views12210
    Read More
  18. No Image

    [PyQt4]multiprocess 예제 코드

    Date2014.08.26 CategoryPyQt4 Bypjk Views16220
    Read More
  19. No Image

    [PyQt4]마우스 클릭 이벤트 예제 코드

    Date2014.08.26 CategoryPyQt4 Bypjk Views14746
    Read More
  20. [PyQt4]폴더 또는 파일을 드레그하여 그 경로를 LineEdit로 가져오기

    Date2014.08.22 CategoryPyQt4 Bypjk Views18964
    Read More
Board Pagination Prev 1 2 Next
/ 2