Встраивание 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 не удалось импортировать модуль (проблема с путем и т. д.)

Другие вопросы по тегам