본문 바로가기

Python

[SWIG] Windows에서 Python과 C 연동하기

윈도우에서 SWIG를 이용해 Python과 C를 연동하는 방법에 대한 자료가 별로 없어 정리해 보았다.

C 코드 작성

진행하기 전에 자신의 컴퓨터에 Cygwin과 GCC가 준비되어 있지 않은 경우 [구글]을 이용해 먼저 설치하기 바란다. 설치를 했으면 다음과 같이 간단한 C 코드를 작성해서 sample.c 라는 이름으로 적당한 디렉토리에 저장한다.
/* sample.c */ 

int echo(int p)
{
    return p;
} 

int add(int x, int y)
{
    return x + y; 
}

sample.c.txt

그리고 Cygwin을 열어서 sample.c 파일이 있는 디렉토리로 이동한다.

여기에서는 'D:\PrjRoot\python_lec' 디렉토리에 sample.c 파일이 있다고 가정하고 진행한다.


SWIG
다음은 sample.c 코드를 Python에서 이용하기 위한 정보 파일인 SWIG 인터페이스, sample.i 파일을 만든다.
/* sample.i */

%module sample

%{
extern int echo(int);
extern int add(int, int);
%} 

extern int echo(int);
extern int add(int, int);

sample.i.txt

그리고 SWIG를 이용해 Wrapper 파일을 생성한다.

자, 다음은 sample.c 파일과 sample_wrap.c 파일에 대한 object 파일을 만들 차례다.

여기에서 옵션 -I (대문자 아이) 에는 Python 설치 디렉토리 하위의 include 디렉토리 경로를 적어주면 된다.

그럼 이제 object 파일을 가지고 공유 라이브러리를 만들어 Python에서 사용할 수 있도록 하자.

옵션 -L (대문자 엘)에는 Python 설치 디렉토리 경로를 적어주고, -l (소문자 엘)에는 Python 설치 디렉토리에 있는PythonXX.dll (Python 2.6을 설치한 경우에는 python26.dll)의 파일명(pythonXX)을 적어주면 된다.

Python 연동 테스트
마지막으로 'test.c' 있는 함수들을 사용할 수 있는지 파이썬 코드를 만들어 테스트해 보자.
# test.py

import sample 

print sample.echo(5)
print sample.add(2, 5)

test.py.txt

위와 같은 결과가 나온다면 Python과 C 연동이 제대로 된 것이다.


참고로 위 코드를 작성하고 테스트한 환경은 다음과 같다.

- Windows XP Professional SP3 한글
- Python 2.6
- SWIG 1.3.36 윈도우용
- Cygwin 2.573.2.3

파이썬 연동
Python 연동