I am trying to Building C Extensions of Python(3.2) on Windows use distutils.
below is the code:(From Demo/embed/demo.c in the Python(3.1.3) source distribution)
/* Example of embedding Python in another program */
#include "Python.h"
PyObject* PyInit_xyzzy(void); /* Forward */
main(int argc, char **argv)
{
/* Ignore passed-in argc/argv. If desired, conversion
should use mbstowcs to convert them. */
wchar_t *args[] = {L"embed", L"hello", 0};
/* Pass argv[0] to the Python interpreter */
Py_SetProgramName(args[0]);
/* Add a static module */
PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
/* Initialize the Python interpreter. Required. */
Py_Initialize();
/* Define sys.argv. It is up to the application if you
want this; you can also let it undefined (since the Python
code is generally not a main program it has no business
touching sys.argv...)
If the third argument is true, sys.path is modified to include
either the directory containing the script named by argv[0], or
the current working directory. This can be risky; if you run
an application embedding Python in a directory controlled by
someone else, attackers could put a Trojan-horse module in the
directory (say, a file named os.py) that your application would
then import and run.
*/
PySys_SetArgvEx(2, args, 0);
/* Do some application specific code */
printf("Hello, brave new world\n\n");
/* Execute some Python statements (in module __main__) */
PyRun_SimpleString("import sys\n");
PyRun_SimpleString("print(sys.builtin_module_names)\n");
PyRun_SimpleString("print(sys.modules.keys())\n");
PyRun_SimpleString("print(sys.executable)\n");
PyRun_SimpleString("print(sys.argv)\n");
/* Note that you can call any public function of the Python
interpreter here, e.g. call_object(). */
/* Some more application specific code */
printf("\nGoodbye, cruel world\n");
/* Exit, cleaning up the interpreter */
Py_Exit(0);
/*NOTREACHED*/
}
/* A static module */
/* 'self' is not used */
static PyObject *
xyzzy_foo(PyObject *self, PyObject* args)
{
return PyLong_FromLong(42L);
}
static PyMethodDef xyzzy_methods[] = {
{"foo", xyzzy_foo, METH_NOARGS,
"Return the meaning of everything."},
{NULL, NULL} /* sentinel */
};
static struct PyModuleDef xyzzymodule = {
{}, /* m_base */
"xyzzy", /* m_name */
0, /* m_doc */
0, /* m_size */
xyzzy_methods, /* m_methods */
0, /* m_reload */
0, /* m_traverse */
0, /* m_clear */
0, /* m_free */
};
PyObject*
PyInit_xyzzy(void)
{
return PyModule_Create(&xyzzymodule);
}
I build the “setup.py” file like this:
from distutils.core import setup, Extension
module1 = Extension('xyzzy',
sources = ['demo.c'])
setup (name = 'xyzzy',
version = '1.0',
description = 'This is a demo package',
ext_modules = [module1])
and them I run the “setup.bat”:
python.exe setup.py build -c mingw32
pause
and I got the error message below:
C:\Documents and Settings\Administrator\桌面\C扩展python>python.exe setup.py bui
ld -c mingw32
running build
running build_ext
building 'xyzzy' extension
creating build
creating build\temp.win32-3.2
creating build\temp.win32-3.2\Release
D:\Program Files\DEV-CPP\Bin\gcc.exe -mno-cygwin -mdll -O -Wall -ID:\Python32\in
clude -ID:\Python32\PC -c demo.c -o build\temp.win32-3.2\Release\demo.o
demo.c:8: warning: return type defaults to `int'
demo.c: In function `main':
demo.c:56: warning: control reaches end of non-void function
writing build\temp.win32-3.2\Release\xyzzy.def
creating build\lib.win32-3.2
D:\Program Files\DEV-CPP\Bin\gcc.exe -mno-cygwin -shared -s build\temp.win32-3.2
\Release\demo.o build\temp.win32-3.2\Release\xyzzy.def -LD:\Python32\libs -LD:\P
ython32\PCbuild -lpython32 -lmsvcr90 -o build\lib.win32-3.2\xyzzy.pyd
D:\Program Files\DEV-CPP\Bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld
.exe: cannot find -lmsvcr90
collect2: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
C:\Documents and Settings\Administrator\桌面\C扩展python>pause
请按任意键继续. . .
I can not understand what “cannot find -lmsvcr90” means?? And by the way,I use the compiler of DEV C++.(Is it the problem??)
Can somebody help me ,Thank you.
msvcr90 is the Microsoft Visual C Runtime. The instructions for building on Windows only describe using Visual Studio; I don’t know if it will work with dev C++. You can download free “Visual Studio Express” here.