在c ++中嵌入python:分段错误

时间:2018-02-18 15:29:30

标签: python c++ segmentation-fault python-c-api python-embedding

我是远程在Linux设备上使用Visual Studio调试c ++应用程序(raspberry pi / raspbian)。在这个c ++应用程序中,我通过使用Python/c api加载函数来嵌入一个简单的Python脚本。这是我的c ++代码:

#include <Python.h>

int main(int argc, char* argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue;

// Initialize the Python Interpreter
Py_Initialize();

// Build the name object
pName = PyUnicode_FromString("//home//pi//projects//InfoBeam//WebScraperPython.txt");

// Load the module object
pModule = PyImport_Import(pName);

// pDict is a borrowed reference 
pDict =  PyModule_GetDict(pModule);

// pFunc is also a borrowed reference 
pFunc = PyDict_GetItemString(pDict, "pyMain");

if (PyCallable_Check(pFunc))
{
    PyObject_CallObject(pFunc, NULL);
}
else
{
    PyErr_Print();
}

// Clean up
Py_DECREF(pModule);
Py_DECREF(pName);

// Finish the Python Interpreter
Py_Finalize();

return 0;
}

问题是,我在运行函数PyModule_GetDict(pModule)时遇到了分段错误。我究竟做错了什么?这是错误消息:

  

编程接收信号SIGSEGV,分段故障。   来自/usr/lib/arm-linux-gnueabihf/libpython3.5m.so.1.0的PyModule_GetDict()中的0x76bfdd28   分段错误

编辑:好的,pModule确实是NULL,可能是因为PyUnicode_FromString失败了。由于PyImport_Import失败:我在哪里需要保存我的脚本,或者:我如何将api传递给它所在的位置?

1 个答案:

答案 0 :(得分:0)

在致电textView.setFocusableInTouchMode(true); textView.setFocusable(true); 之前,请检查PyModule_GetDict是否为空。这意味着pModule无法导入模块(路径问题等等)