2007년 07월 19일
swig 을 활용한 프로그래밍. ( windows + gcc )
Python 프로그래밍을 하다보니... 이제 슬슬 C 모듈을 댕겨오고 싶다.
그래서 찾아본것이 swig ....
그런데 visual C++ 환경에서 컴파일하는 방법만 있고....그것도 다가 아닌듯 한데....
내가 찾는 DevC++ 기반의 컴파일을 어떻게 해야하는건지... 어제 3시간 날렸다 ;;;;;
하여튼....
http://sebsauvage.net/python/mingw.html
에서 해답을 찾을수 있다.
1. swig 모듈의 압축을 푼후 swig 의 실행파일이 있는곳에 패스를 걸어둔다.
(환경 변수 Path 를 의미한다 )
2. setup.py 를 만든다
# setup.py
import distutils
from distutils.core import setup, Extension
setup(name = "Simple example from the SWIG website",
version = "2.2",
ext_modules = [Extension("_example", ["example.i","example.c"])])
첫줄에 _example 을 명심해야 한다 ( _ 인 중요하다 )
( 솔라리스,리눅스등에서는 오히려 _ 를 없애야 한다 그냥 example )
그런데 외부 라이브러리를 가져와서 컴파일 한다면 어떻게 해야 할까 ?
http://www.mingw.org/MinGWiki/index.php/Python%20extensions 를 참조하면 그 해답을 쉽게 얻을수 있다.
# setup.py
from distutils.core import setup, Extension
setup (name = "_example",
version = "1.0",
maintainer = "Your Name",
maintainer_email = "your.name@domain.org",
description = "Sample Python C Extension",
ext_modules = [Extension('_example',
extra_compile_args=['-O2'],
library_dirs=['/mingw/lib'],
sources=['example.c','example_wrap.c'])])
# setup.py
from distutils.core import setup, Extension
setup (name = "_example",
version = "1.0",
maintainer = "Your Name",
maintainer_email = "your.name@domain.org",
description = "Sample Python C++ Extension",
ext_modules = [Extension('_example',
extra_compile_args=['-O2'],
library_dirs=['/mingw/lib'],
libraries=['supc++'],
sources=['example.cxx','example_wrap.cxx'])])
library_dirs 와 libraries 를 활용하면 될듯하다... ^^
3. 컴파일 한다.
python setup.py build -cmingw32
4.example.pyd 를 현재 디렉토리에 두거나 PYTHONPATH 쪽에 집어 넣어둔다
( C:\Python25\Lib\site-packages )
컴파일 디렉토리에 example.py 라는 파일이 생기는데 pyd 파일이랑 같이 집어 넣는게 좋을거 같다.
example.pyd 는 C:\build\lib.win32-2.5 디렉토리에 생긴다... ( 참고로 난 C:\ 에서 컴파일 했음 )
위의 4번 과정을 간단히 python setup.py install 로 처리가능 하다.
혹시 필요한 분이 있을지 몰라... 첨부를 걸어둔다 example.cexample.isetup.py
관련된 한글 강좌가 있어 링크를 걸어 둔다
[SWIG강좌] 시작의 변...
[SWIG강좌] 3.1 개요
[SWIG강좌] 3.2. Basics
[SWIG강좌] 3.3 C++에서의 사용 (1)
[SWIG강좌] 3.3 C++에서의 사용 (3)
[SWIG강좌] 3.4 Typemap (1)
[SWIG강좌] 3.4 Typemap (2)
[SWIG강좌] 3.4 Typemap (3)
[SWIG강좌] 3.4 Typemap (4)
# by | 2007/07/19 10:19 | Python | 트랙백 | 덧글(2)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
wxPython 하고 연동도 해보고 싶고...^^ 물론 리눅스에서도 가능하지만요
고감자님 불로그에도 swig 관련 글이 하나 있지요 ? 잘 보겟습니다.