| Store | Cart

[Distutils] (no subject)

From: garyr <gar...@fidalgo.net>
Tue, 18 Aug 2015 09:58:49 -0700
I posted this on comp.lang.python but received no replies.

I tried building the spammodule.c example described in the documentation
section "Extending Python with C or C++." As shown the code compiles OK but
generates a link error:

LINK : error LNK2001: unresolved external symbol init_spam
build\temp.win32-2.7\Release\_spam.lib : fatal error LNK1120: 1 unresolved
externals

I tried changing the name of the initialization function spam_system to
init_spam and removed the static declaration. This compiled and linked
without errors but generated a system error when _spam was imported.

I'm using Python 2.7.9. The same error occurs with Python 2.6.9.

The code and the setup.py file are shown below. What do I need to do to fix 
this?

setup.py:
-----------------------------------------------------------------------------
from setuptools import setup, Extension

setup(name='spam',
    version='0.1',
    description='test module',
    ext_modules=[Extension('_spam', ['spammodule.c'],
                    include_dirs=[C:\Documents and
Settings\Owner\Miniconda\include],
                    )],
    )

sammodule.c
--------------------------------------------------
#include <python.h>
static PyObject *SpamError;

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
    const char *command;
    int sts;

    if (!PyArg_ParseTuple(args, "s", &command))
        return NULL;
    sts = system(command);
    if (sts < 0) {
        PyErr_SetString(SpamError, "System command failed");
        return NULL;
    }
    return PyLong_FromLong(sts);
}

static PyMethodDef SpamMethods[] = {

    {"system",  spam_system, METH_VARARGS,
     "Execute a shell command."},
    {NULL, NULL, 0, NULL}        /* Sentinel */
};

PyMODINIT_FUNC
initspam(void)
{
    PyObject *m;

    m = Py_InitModule("spam", SpamMethods);
    if (m == NULL)
        return;

    SpamError = PyErr_NewException("spam.error", NULL, NULL);
    Py_INCREF(SpamError);
    PyModule_AddObject(m, "error", SpamError);
}









_______________________________________________
Distutils-SIG maillist  -  Dist...@python.org
https://mail.python.org/mailman/listinfo/distutils-sig

Recent Messages in this Thread
garyr Aug 18, 2015 04:58 pm
Oscar Benjamin Aug 18, 2015 07:51 pm
Oscar Benjamin Aug 18, 2015 09:56 pm
Messages in this thread