gpt4 book ai didi

python - 从 Python 文件调用 C 函数。使用Setup.py文件时出现错误

转载 作者:行者123 更新时间:2023-11-30 15:13:32 25 4
gpt4 key购买 nike

我的问题如下:我想从我的 Python 文件调用 C 函数并将一个值返回到该 Python 文件。我尝试了以下在Python中使用嵌入式C的方法(以下代码是名为“mod1.c”的C代码)。我使用的是Python3.4,因此格式遵循文档指南中给出的格式。当我调用时,问题就出现了我的设置文件(下面的第二个代码)。 #包括 #include“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 从 distutils.core 导入设置,扩展

setup(name='buildsum', version='1.0',  \
ext_modules=[Extension('buildsum', ['mod1.c'])])

使用 gcc 编译代码时得到的结果是以下错误:无法导出 PyInit_buildsum: 符号未定义

如果您对此问题有任何见解或帮助,或者有关如何从 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);
}

对于第一个函数;但是,我仍然收到相同的错误 PyInit_sum: symbol not Defined

最佳答案

上面的工作代码,以防有人遇到同样的错误:@dclarke 的答案是正确的。 python 3 中的初始化函数必须以 PyInit_(name) 作为名称。

#include <Python.h>
#include "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[] = {
{"modsum", mod_sum, METH_VARARGS, "Descirption"},
{NULL,NULL,0,NULL}
};

// Module Definition Structure
static struct PyModuleDef summodule = {
PyModuleDef_HEAD_INIT,"modsum", NULL, -1, ModMethods
};

/* INITIALIZATION FUNCTION*/
PyMODINIT_FUNC PyInit_sum(void)
{
PyObject *m;
m = PyModule_Create(&summodule);
return m;
}

关于python - 从 Python 文件调用 C 函数。使用Setup.py文件时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com