Acessando código C/C++ de uma linguagem de script com o SWIG
- por Sergio Prado
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.
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