Встраивание Python в C++: ошибка сегментации
Я удаленно Отлаживаю приложение C++ с Visual Studio на устройстве Linux (raspberry pi/raspbian). В этом приложении C++ я встроил простой скрипт на Python, загрузив функцию с помощью API Python/c. Это мой код 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, Ошибка сегментации. 0x76bfdd28 в PyModule_GetDict () из /usr/lib/arm-linux-gnueabihf/libpython3.5m.so.1.0 Ошибка сегментации
РЕДАКТИРОВАТЬ: Хорошо, pModule был действительно NULL, вероятно, потому что PyUnicode_FromString не удалось. Поскольку PyImport_Import не работает: где мне нужно сохранить мой скрипт или: как передать API информацию, где он находится?
1 ответ
Перед звонком PyModule_GetDict
, Проверь это pModule
не NULL. Это будет означать, что PyImport_Import
не удалось импортировать модуль (проблема с путем и т. д.)