0% found this document useful (0 votes)
55 views2 pages

C Functions From Python Mac OS X

C Functions From Python Mac OS X

Uploaded by

zennro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
55 views2 pages

C Functions From Python Mac OS X

C Functions From Python Mac OS X

Uploaded by

zennro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

Calling C functions from within Python using Mac OS X

Christian Stigen Larsen March 28, 2006

Introduction

Heres a small tutorial on how to call your C functions from within Python.

Your C program

Lets make some simple functions from within C. Well call the le myModule.c. #include <Python.h> // Function to be called from Python static PyObject* py_myFunction(PyObject* self, PyObject* args) { char* s = "Hello from C!"; return Py_BuildValue("s", s); } // Another function to be called from Python static PyObject* py_myOtherFunction(PyObject* self, PyObject* args) { double x, y; PyArg_ParseTuple(args, "dd", &x, &y); return Py_BuildValue("d", x*y); } // Bind Python function names to our C functions static PyMethodDef myModule_methods[] = { {"myFunction", py_myFunction, METH_VARARGS}, {"myOtherFunction", py_myOtherFunction, METH_VARARGS}, {NULL, NULL} }; // Python calls this to let us initialize our module void initmyModule() { (void) Py_InitModule("myModule", myModule_methods); }

Compilation

Compiling dynamic libraries on Mac OS X is dierent from the usual gcc -shared you might be used to: gcc -dynamiclib -I/usr/include/python2.3/ -lpython2.3 -o myModule.dylib myModule.c Now you have to do something awkward; rename myModule.dylib to myModule.so so that Python will nd the correct le (this is a bug in Python, it shouldve been xed, but thats as far as I know): mv myModule.dylib myModule.so If you are using a system that supports gcc -shared you can do this: gcc -shared -I/usr/include/python2.3/ -lpython2.3 -o myModule.so myModule.c

Calling your functions from Python

Heres a simple program in Python to call your functions: from myModule import * print "Result from myFunction():", myFunction(), "." print "Result from myOtherFunction():", myOtherFunction(4.0, 5.0), "." The output is this: Result from myFunction(): Hello from C! . Result from myOtherFunction(): 20.0 . If you are going to make bigger libraries available from Python I suggest you check out SWIG on the web.

You might also like