我已经下载了Python 2.7.1 source code,在解压缩后发出了这个命令:
D:\sources\Python-2.7.1>gcc -c -I.\Include -I.\PC -I.\Python .\Python\Python-ast.c
.\Python\Python-ast.c:464: error: initializer element is not constant
.\Python\Python-ast.c:464: error: (near initialization for 'AST_type.ob_type')
有问题的代码:
static PyTypeObject AST_type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0) //this is line 464
"_ast.AST",
sizeof(PyObject),
0,
0, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */
0, /* tp_compare */
0, /* tp_repr */
0, /* tp_as_number */
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
0, /* tp_call */
0, /* tp_str */
PyObject_GenericGetAttr, /* tp_getattro */
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
0, /* tp_doc */
0, /* tp_traverse */
0, /* tp_clear */
0, /* tp_richcompare */
0, /* tp_weaklistoffset */
0, /* tp_iter */
0, /* tp_iternext */
ast_type_methods, /* tp_methods */
0, /* tp_members */
0, /* tp_getset */
0, /* tp_base */
0, /* tp_dict */
0, /* tp_descr_get */
0, /* tp_descr_set */
0, /* tp_dictoffset */
(initproc)ast_type_init, /* tp_init */
PyType_GenericAlloc, /* tp_alloc */
PyType_GenericNew, /* tp_new */
PyObject_Del, /* tp_free */
};
我正在使用TDM GCC:
gcc version 4.4.1 (TDM-1 mingw32)
指定的目录包含所需的所有包含。为什么会这样? Python-ast.c中的代码看起来像标准C。
感谢您的帮助
答案 0 :(得分:1)
Windows上的Python期望使用MSVC进行编译。为它设置了#define
等。他们可能会寻找宏_WIN32
或其他东西,它由MSVC定义,并且(如果我没记错的话)由mingw32定义。由于您使用mingw而不是MSVC进行编译,这可能是问题的一部分。
我还会找出PyVarObject_HEAD_INIT
的定义位置,并尝试弄清楚该行可能导致错误的内容。