gpt4 book ai didi

python - Omnet++简单模块C++代码中python嵌入式代码中的Segmentation fault错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:57 24 4
gpt4 key购买 nike

我想从 OMNeT++ 简单模块中的 C++ 代码调用 Python 函数。

我使用 gdb 调试了代码。它很好地通过了所有线路,但最后Py_Finalize(); 之后发生段错误。

Segmentation fault error

我找到了以下 issue on GitHub描述了同样的问题。但这并没有帮助我解决问题。

double result=0;
// 1) Initialise python interpretator
if (!Py_IsInitialized()) {
Py_Initialize();
//Py_AtExit(Py_Finalize);
}
// 2) Initialise python thread mechanism
if (!PyEval_ThreadsInitialized()) {
PyEval_InitThreads();
assert(PyEval_ThreadsInitialized());
}

PyGILState_STATE s = PyGILState_Ensure();
PyRun_SimpleString("import sys; sys.path.append('/home/mypath/')");
PyObject *pName = PyUnicode_DecodeFSDefault((char*)"integrationTest");
PyObject* pModule = PyImport_Import(pName);

if (pModule != NULL)
{
PyObject* pFunction = PyObject_GetAttrString(pModule, (char*)"calculateExecutionTime");
/// changement will be held in this level Args and function result.
PyObject* pArgs = PyTuple_Pack(2,PyFloat_FromDouble(2.0),PyFloat_FromDouble(8.0));
PyObject* pResult = PyObject_CallObject(pFunction, pArgs);
result = (double)PyFloat_AsDouble(pResult);
///////
}
// Clean up
PyGILState_Release(s);
Py_DECREF(pName);
Py_DECREF(pModule);
Py_Finalize();

最佳答案

问题发生在 python 解释器第一次初始化/取消初始化之后。 OmneT++ 模拟期间发生的事情是初始化/取消初始化/重新初始化/... Python 解释器。然而,Numpy 不支持这个;

因此,我通过在模拟开始时使用 initialize() 方法初始化 python 解释器一次来解决这个问题。然后,我调用了 Py_Finalize();在析构函数中。

关于python - Omnet++简单模块C++代码中python嵌入式代码中的Segmentation fault错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56361853/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com