从Python文件调用C函数。使用时出错设置.py金融机构

2024-04-24 15:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题如下: 我想从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


Tags: 文件方法函数代码namereturnifargs
1条回答
网友
1楼 · 发布于 2024-04-24 15:45:12

上面的工作代码,以防任何人遇到相同的错误:@dclarke的答案是正确的。python3中的初始化函数的名称必须是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; 
}

相关问题 更多 >