链接错误:Python的C/C++扩展

0 投票
1 回答
532 浏览
提问于 2025-04-19 12:13

正如我标题所说,我正在尝试为Python开发一个C扩展。我按照这里的教程进行了操作,并运行了setup.py脚本。然而,当我运行Python解释器并尝试导入我新创建的模块时,出现了一个链接错误,提示未定义的符号:py_BuildValue。我还尝试自己编译,但得到了相同的错误,另外还有一个错误提示Py_InitModule3未定义。我已经安装了python3.2-dev和python3-dev。以下是我的test.c代码:

#include <python3.2/Python.h>
static PyObject* Test(PyObject* self){
    return py_BuildValue("s","This is a test and my first trip into the world of python bindings!!");
}

static PyMethodDef test_funcs[] ={{"testExtensions",(PyCFunction)Test, METH_NOARGS,"This is my First Extension!!"},{NULL}};

 void initTest(void){
    Py_InitModule3("Test", test_funcs, "Extension module example!");
}

这是我的setup.py代码:

from distutils.core import setup, Extension
setup(name='Test', version='1.0',  \
    ext_modules=[Extension('Test', ['test.c'])])

1 个回答

2

这是因为这个函数叫做 Py_BuildValue,而不是 py_BuildValue。在C语言中,大小写是有区别的。如果你查看一下编译信息的上面部分,你可能会看到一个警告,提示这个函数被隐式声明了。

撰写回答