#include <Python.h>
static PyObject* helloworld(PyObject* self)
{
return Py_BuildValue("s", "Hello, Python extensions!!");
}
static char helloworld_docs[] =
"helloworld( ): Any message you want to put here!!\n";
static PyMethodDef helloworld_funcs[] = {
{"helloworld", (PyCFunction)helloworld,
METH_NOARGS, helloworld_docs},
{NULL}
};
void inithelloworld(void)
{
Py_InitModule3("helloworld", helloworld_funcs,
"Extension module example!");
}
我一直在尝试使用C扩展Python,因此一直在尝试在Visual Studio中编译上面的代码。但是,我反复收到以下错误:
LINK : fatal error LNK1104: cannot open file 'python27.lib'
将python27.lib添加到项目后,我得到以下错误:
HiWorld.obj : error LNK2001: unresolved external symbol __imp__Py_BuildValue
HiWorld.obj : error LNK2001: unresolved external symbol __imp__Py_InitModule4
我已经坚持了很长一段时间,并且非常感谢任何建议。
答案 0 :(得分:0)
假设您的代码正确,最好的方法是使用setup.py
文件。例如,这是我在创建hello world模块时使用的代码:
setup.py:
from distutils.core import setup, Extension
setup(
ext_modules = [
Extension("ext1", sources=["ext1.c"]),
],
)
此处,“ext1"
将替换您的模块名称,”“ext1.c”将替换您的C源文件名称。
然后你从这样的终端运行它:
setup.py install
仅供进一步参考,这是我的C源:
ext1.c:
#include "Python.h"
static PyObject *
hello_world(PyObject * self, PyObject * args)
{
return Py_BuildValue("s", "Hello World!");
}
static PyMethodDef
module_functions[] = {
{ "hello_world", hello_world, METH_VARARGS, "Says Hello World."},
{ NULL }
};
void
initext1(void)
{
Py_InitModule3("ext1", module_functions, "My additional Module");
}
答案 1 :(得分:0)
这是一个链接问题,最常见的错误是忘记了Release配置文件和Debug配置文件使用不同的符号集,因此只能成功地链接到不同版本的库;这意味着在调试模式下,您应该提供library-debugVersion.lib
和版本library.lib
。
我也没有太多使用Visual Studio,但我认为将常用的所有库放在类似C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\
的公共文件夹中会更方便,所以VS可以自动为你找到合适的库无论单个项目的设置是什么。