Python extension, where am I going wrong

  • Thread starter John Vines (CISD/HPCD)
  • Start date


John Vines (CISD/HPCD)

I am trying to create an extension module and keep getting an error,
"/usr/local/lib/python2.5/site-packages/ undefined symbol:

thanks in advance,

*Here is my source code and information:

*/* mytest.c */
#include <Python.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>

static PyObject *ErrorObject;

static char isEven__doc__[] = "Method to determine if number is odd or

static PyObject *isEven(PyObject *self, PyObject *args){
int inputValue;
int returnValue;

if (!PyArg_ParseTuple(args, "i", &inputValue)){
PyErr_SetString(PyExc_ValueError, "Argument parsing Error");
return NULL;

if ( 0 == inputValue%2 ){
returnValue = 1;
} else {
returnValue = 0;
return Py_BuildValue("i", returnValue);

static char getFactorial__doc__[] = "This module takes a number as a
parameter \
and returns the factorial of that number\n";

static PyObject *getFactorial(PyObject *self, PyObject *args){
int inputValue;
int resultValue;

if (!PyArg_ParseTuple(args, "i", &inputValue)){
PyErr_SetString(PyExc_ValueError, "Argument parsing error");
return NULL;

resultValue = factorialHelper(inputValue);
return PyInt_FromLong(resultValue);

int factorialHelper(int factor){
if (factor <= 0){
return 0;
if (factor == 1){
return 1;
return factor*factorialHelper(factor-1);

static struct PyMethodDef mytest_methods[] = {
{"isEven", isEven, METH_VARARGS, "Determine odd/even of a number"},
{"getFactorial", getFactorial, METH_VARARGS, "Calc the factorial
value of a number"},

void initmytest(){
PyObject *m, *d;

m = PyInitModule("mytest", mytest_methods);
d = PyModule_GetDict(m);

ErrorObject = PyBuildValue("s", "mytest module error");
PyDict_SetItemString(d, "Error", ErrorObject);

if (PyErr_Occurred())
Py_FatalError("Can't initialize module mytest!");

*My code:*
#!/usr/bin/env python
from distutils.core import setup, Extension

setup(name="mytest", version="1.0",
ext_modules=[Extension("mytest", ["mytest.c"])])


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question