Acessando código C/C++ de uma linguagem de script com o SWIG

- por Sergio Prado

Categorias: Linguagem C Tags: ,

Imagine que você tenha determinado código em C/C++ e queira acessá-lo de uma linguagem de script.

1
2
3
4
5
6
7
8
9
10
11
/* fatorial.c */
int fatorial(int n)
{
	if (n <= 1)
		return 1;
	else
		return n * fatorial(n-1);
}
 
/* fatorial.h */
int fatorial(int n);

A ferramenta SWIG (Simplified Wrapper and Interface Generator) pode resolver seu problema.

swig17

Esta ferramenta é capaz de conectar um código escrito em C/C++ com diferentes linguagens de script, incluindo Perl, Python, Ruby e TCL.

O primeiro passo é criar um arquivo de interface que servirá de entrada para o SWIG:

$ cat fatorial.i
%module fatorial
%{
#define SWIG_FILE_WITH_INIT
#include "fatorial.h"
%}
 
int fatorial(int n);

Esta interface precisa ser processada pela ferramenta SWIG, que irá gerar o código-fonte necessário para acessar o código em C/C++. Vamos testar com Python.

$ swig -python fatorial.i

Agora é só gerar o módulo Python com os comandos abaixo:

$ gcc -O2 -fPIC -c fatorial.c
$ gcc -O2 -fPIC -c fatorial_wrap.c -I/usr/include/python2.7/
$ gcc -shared fatorial.o fatorial_wrap.o -o _fatorial.so

No final teremos o módulo _fatorial.so, que pode ser utilizado pelo interpretador Python:

$ python
>>> import fatorial
>>> fatorial.fatorial(4)
24

Mais informações estão disponíveis na página do projeto.

Happy Hacking!

Sergio Prado

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.