在我的Ubuntu下:
$ 猫测试.py
#Filename test.py
def Hello():
print "Hello, world!"
$ 猫汤姆.cpp
#include <Python.h>
int main()
{
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
pModule = PyImport_ImportModule("test");
pFunc = PyObject_GetAttrString(pModule, "Hello");
PyEval_CallObject(pFunc, NULL);
Py_Finalize();
return 0;
}
然后编译它:
g++ tom.cpp -I/usr/include/python2.7 -L/usr/lib/python2.7 -lpython2.7
跑步:
$ ./a.out
Segmentation fault
为什么?
有人可以帮忙吗?
谢谢!
BR,
Tom
前面的海报可能是正确的,所以我的评论更“通用”......但在 C/C++ 中,在尝试取消引用之前,您不应该在未确认函数不为 NULL 的情况下接受从函数返回的指针。上面的代码应该更正确:
pModule = PyImport_ImportModule("test");
if (pModule == NULL) {
printf("ERROR importing module");
exit(-1);
}
pFunc = PyObject_GetAttrString(pModule, "Hello");
if (pFunc == NULL) {
printf("ERROR getting Hello attribute");
exit(-1);
}
PyEval_CallObject(pFunc, NULL);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)