gpt4 book ai didi

python - 通过 Python 调用 C 函数 - 编译后

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

在尝试从 Python 调用 c 函数时(在上一篇文章 Calling a C function from a Python file. Getting error when using Setup.py file 中),我已将代码编译到 .pyd 文件中并正在测试该程序。但是,我遇到了错误

AttributeError: 'module' object has no attribute 'addTwo'

我的测试文件如下:

import callingPy
a = 3
b = 4
s = callingPy.addTwo(a, b)
print("S", s)

其中callingPy是通过编译得到如下.c文件(变成.pyd):

#include <Python.h>
#include "adder.h"

static PyObject* adder(PyObject *self, PyObject *args)
{
int a;
int b;
int s;
if (!PyArg_ParseTuple(args,"ii",&a,&b))
return NULL;
s = addTwo(a,b);
return Py_BuildValue("i",s);
}

/* DECLARATION OF METHODS*/
static PyMethodDef ModMethods[] = {
{"modsum", adder, 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_callingPy(void)
{
PyObject *m;
m = PyModule_Create(&summodule);
return m;
}

任何帮助将不胜感激!谢谢。

最佳答案

扩展模块中的唯一函数以modsum名称导出到Python。您调用了 addTwo。这似乎是不言自明的。

看起来在 C 层,有一个名为 addTwo 的原始 C 函数,它为 C 函数 adder 工作,然后将其导出到 Python名称modsum。因此,您应该重命名导出,或使用正确的名称调用它:

s = callingPy.modsum(a, b)

看起来您复制粘贴了一个骨架扩展模块,切换了一个微小的内部,并且没有修复任何导出或名称。

关于python - 通过 Python 调用 C 函数 - 编译后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34521511/

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