我的问题如下: 我想从Python文件中调用一个C函数,并将一个值返回给该Python文件。 我尝试了在Python中使用嵌入式C的以下方法(下面的代码是名为“mod1.C”的C代码)。我使用的是Python3.4,所以格式遵循文档指南中给出的格式。当我调用我的安装文件(下面的第二个代码)时,问题出现了。 #包括 #包括“sum.h”
static PyObject*
mod_sum(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = sum(a,b);
return Py_BuildValue("i",s);
}
/* DECLARATION OF METHODS */
static PyMethodDef ModMethods[] = {
{"sum", mod_sum, METH_VARARGS, "Descirption"}, // {"methName", modName_methName, METH_VARARGS, "Description.."}, modName is name of module and methName is name of method
{NULL,NULL,0,NULL}
};
// Module Definition Structure
static struct PyModuleDef summodule = {
PyModuleDef_HEAD_INIT,
"sum",
NULL,
-1,
ModMethods
};
/* INITIALIZATION FUNCTION */
PyMODINIT_FUNC initmod(void)
{
PyObject *m;
m = PyModule_Create(&summodule);
if (m == NULL)
return m;
}
你知道吗设置.py 从分布核心导入设置,扩展
setup(name='buildsum', version='1.0', \
ext_modules=[Extension('buildsum', ['mod1.c'])])
使用gcc编译代码时得到的结果是以下错误:无法导出PyInit\u buildsum:symbol not defined
我将非常感谢任何关于这个问题的见解或帮助,或者任何关于如何从Python调用C的建议。谢谢您!你知道吗
------------------------------------编辑--------------------------------- 感谢您的评论: 我现在尝试了以下方法:
static PyObject*
PyInit_sum(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = sum(a,b);
return Py_BuildValue("i",s);
}
对于第一个函数,我仍然得到相同的错误:symbol not defined
上面的工作代码,以防任何人遇到相同的错误:@dclarke的答案是正确的。python3中的初始化函数的名称必须是PyInit(name)。你知道吗
相关问题 更多 >
编程相关推荐