我想在Windows上使用distutils構建Python的Python 3.2擴展(3.2)。下面 是代碼:(從在Python(3.1.3)源分佈演示/嵌入/ demo.c)構建Python的擴展(3.2),但得到錯誤「找不到-lmsvcr90」
/* 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);
}
我建立 「setup.py」 文件是這樣的:
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])
和他們,我運行 「的setup.bat」:
python.exe setup.py build -c mingw32
pause
,我得到了以下錯誤消息:
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
請按任意鍵繼續. . .
我不明白「找不到-lmsvcr90」是什麼意思?順便說一下,我使用DEV C++的編譯器(是否有問題?)
有人可以幫助我,謝謝。
有憐憫,請學習如何正確格式化SO問題! – mloskot