我是远程在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传递给它所在的位置?
答案 0 :(得分:0)
在致电textView.setFocusableInTouchMode(true);
textView.setFocusable(true);
之前,请检查PyModule_GetDict
是否为空。这意味着pModule
无法导入模块(路径问题等等)