因此,我尝试使用c为python创建一个基本扩展。在使用设置.py文件,我有个错误说
helloworld.c(14): error C2099: initializer is not a constant
下面是我的“helloworld.c”文件的代码。。。你知道吗
#include <stdio.h>
#include <Python.h>
static PyObject* helloworld(PyObject* self, PyObject* args) {
printf("Hello World");
return Py_None;
}
static PyMethodDef myMethods[] = {
{ "helloworld", helloworld, METH_NOARGS, "Prints Hello World" },
{ NULL, NULL, 0, NULL }
};
static struct PyMethodDef myModule = {
PyMethodDef_HEAD_INIT,
"myModule",
"Test Module",
-1,
myMethods
};
PyMODINIT_FUNC PyInit_myModule(void) {
return PyModule_Create(&myModule);
}
这是我的名字设置.py'文件。。。你知道吗
from distutils.core import setup, Extension
setup(name = "myModule", version = '1.0', \
ext_modules = [Extension('myModule', ['helloworld.c'])])
为什么会导致此错误,我如何修复它?谢谢。你知道吗
你的问题很简单。对于模块实例,使用了错误的类型
struct PyMethodDef
而不是struct PyModuleDef
,并且还使用了不存在的标识符PyMethodDef_HEAD_INIT
而不是PyModuleDef_HEAD_INIT
来初始化其第一个元素。你知道吗我不知道为什么你的编译器会告诉你这不是一个常量初始值设定项,而不是告诉你它根本不存在(clang和gcc都是这样做的,我不记得MSVC的错误消息有那么糟糕……),但这才是真正的问题:没有
PyMethodDef_HEAD_INIT
这样的东西。你知道吗如果同时修复这两个问题:
…它构建:
…而且,尽管您可能想给它起个像
helloworld
或_helloworld
这样的名字,而不是myModule
,但它是有效的:(您可能也想在字符串的末尾加一个
\n
。)相关问题 更多 >
编程相关推荐