我无法在 C++ 中嵌入 Python。我正在使用 Mingw w64 gcc 和 64 位 Python 2.7.11。
#include <Python.h>
int main(int argc, char *argv[]) {
Py_Initialize();
PyObject* pName = PyString_FromString("test");
Py_DECREF(pName);
Py_Finalize();
return 0;
}
调用编译器:
g++ "-IC:\\Python27\\include" -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -o "src\\main.o" "..\\src\\main.cpp"
g++ "-LC:\\Python27\\libs" -std=c++11 -o pytest.exe "src\\main.o" -lpython27
问题是它在 Py_DECREF 中出现段错误。我尝试扩展宏,并将段错误跟踪到以下语句:
((*(((PyObject*) ((PyObject *) (pName)))->ob_type)->tp_dealloc)((PyObject *) ((PyObject *) (pName))));
结果,tp_dealloc 指向 0x1。
同样的问题发生在 Python 文档中提供的示例代码中: https ://docs.python.org/2/extending/embedding.html#pure-embedding
如果我删除对 Py_DECREF(pName) 和 Py_DECREF(pArgs) 的一些调用,文档中的代码将按预期工作。然而,我在网上找到的每个示例(包括 Python 文档中的示例)都调用了 Py_DECREF。
此错误的原因可能是什么?我的构建环境会不会有一些不一致?