python cpp通信中tensorflow 2.2 env的Pybind11异常
下面是CPP调用python文件的源代码,供参考python cpp通信中tensorflow 2.2 env的Pybind11异常,python,c++,tensorflow,pyobject,Python,C++,Tensorflow,Pyobject,下面是CPP调用python文件的源代码,供参考 int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pFunc; PyObject *pArgs, *pValue; int i; string pythonFunction = "sample_fun"; string pythonFile = "sample" string tensoflow_env = &qu
int main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pFunc;
PyObject *pArgs, *pValue;
int i;
string pythonFunction = "sample_fun";
string pythonFile = "sample"
string tensoflow_env = "tensorflow_env_path";
wchar *env = Py_DecodeLocal(tensoflow_env,NULL);
Py_SetPythonHome(env);
Py_Initialize();
pName = PyUnicode_DecodeFSDefault(pythonFile.c_str());
/* Error checking of pName left out */
pModule = PyImport_Import(pName);
Py_DECREF(pName);
if (pModule != NULL) {
pFunc = PyObject_GetAttrString(pModule, pythonFunction.c_str());
/* pFunc is a new reference */
if (pFunc && PyCallable_Check(pFunc)) {
pValue = PyObject_CallObject(pFunc, NULL);
if (pValue != NULL) {
Py_DECREF(pValue);
}
else {
Py_DECREF(pFunc);
Py_DECREF(pModule);
PyErr_Print();
fprintf(stderr,"Call failed\n");
return 1;
}
}
else {
if (PyErr_Occurred())
PyErr_Print();
fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
}
Py_XDECREF(pFunc);
Py_DECREF(pModule);
}
else {
PyErr_Print();
fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
return 1;
}
if (Py_FinalizeEx() < 0) {
return 120;
}
return 0;
def sample_fun():
import tensorflow as tf
return 'Success'
问题:
上面的代码在运行tensorflow2.0env时运行正常,但如果运行tensorflow2.2env,则在PYObject_CallObject(pFunc,NULL)中给出以下异常
< P>错误:微软C++异常:PyBIDEN11::ErrRoRyRead ySyt设置在内存位置XXXXX
关于上述问题的可能原因,任何机构都有想法吗?
注意:使用python 3.7.6构建Tensorflow2.2和使用python 3.7.7构建Tensorflow2.0