Swig Tutorial example Mac Os Lion

This tutorial is based on Leopard Tutorial but still works, thou some warnings.

First, we create an example.c file with this content:

/* File : example.c */

#include <time.h>
double My_variable = 10.0;

int fact(int n) {
    if (n <= 1) return 1;
    else return n*fact(n-1);
}

int my_mod(int x, int y) {
    return (x%y);
}

char *get_time()
{
    time_t ltime;
    time(&ltime);
    return ctime(&ltime);
}

Second, we create the interface between C and Python with the following file:

/* example.i */
%module example
%{
    /* Put header files here or function declarations like below */
    extern double My_variable;
    extern int fact(int n);
    extern int my_mod(int x, int y);
    extern char *get_time();
%}

extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();

Now that we have all the source files we need, we compile them in this way:

$ swig -python example.i
$ cc -c `python-config --cflags` example.c example_wrap.c
$ cc -bundle `python-config --ldflags` example.o example_wrap.o -o _example.so

if you have problems with this step check this other post

So, everything looks nice, but how do we use the dynamic module in python?

>>> import example
>>> example
<module 'example' from 'example.pyc'>
>>> example.cvar.My_variable
10.0
>>> example.my_mod(20,10)
0
>>> example.fact(14)
1278945280
>>> example.get_time()
'Sat Feb 11 19:27:05 2012\n'

disclaimer: this is just the tutorial from the swig's homepage, it only shows how you can actually use some C power into python. For example, scipy package, in the module cluster uses a C function wrapped into python code.

Comments

Anonymous said…
Thanks for the mac gcc arguments for the swig tutorial. I'm new to using gcc on mac so the mac-specific usage threw me.
J. said…
Great!
Thank for the comment! :)

Popular posts from this blog

Como configurar el control de directv para que funcione con el Tv

Como escuchar la rock and pop desde Ubuntu

Adopción de ap unifi cuando el comando set-inform no aparece en el ap por ssh - docker controller