Interfacing python and C

MRAB google at mrabarnett.plus.com
Fri Mar 27 13:34:05 EDT 2009


steve William wrote:
> Hi All,
> 
> I'm using SWIG for the first time and I am facing some problems with 
> user defined header files. I'm trying to use my own header file in a C 
> program which would be interfaced with python.
> 
> The header file is test.h:
> /#include <stdio.h>
> 
> int fact(int n) {
>      if (n <= 1) return 1;
>      else return n*fact(n-1);
> }/
>    
> The C program is test1.c:
> /#include <stdio.h>
> #include "test.h"
> 
> int calc_fact(int a)
> {
>     return (fact(a));
> }/
> 
> The interface file is test1.i:
> /%module test1
> 
> %{
> #include "stdio.h"
> #include "test.h"
>  %}
> 
> int calc_fact(int a);/
> 
> The commands that I used to generate the wrappers are:
> /swig -python test1.i
> gcc -c test1.c test1_wrap.c -I/usr/include/python2.5 
> -I/usr/lib/python2.5/config
> g++ -shared test1_wrap.o -o _test1.so/
> 
> When I try to import test1, I get an error saying:
> />>> import test1
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>   File "test1.py", line 22, in <module>
>     import _test1
> ImportError: ./_test1.so: undefined symbol: calc_fact/
> 
> I'm not sure why this is happening because when I try without user 
> defined header file, it works. Also the error says that it does not 
> recognize /calc_fact/ which is a function that I want to access from 
> python and is declared in the interface file.
> 
> Is there any specific way in which user defined headers need to be 
> declared in the interface file? Should the user defined header be placed 
> in the /usr/include  directory?
> 
> Any help on this is highly appreciated.
> 
Should you be putting a function body in a header file?



More information about the Python-list mailing list