Py_DECREF分段错误

时间:2016-03-18 08:18:46

标签: python c++ embedded-language

我在使用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。

导致此错误的原因是什么?我的构建环境会不一致?

1 个答案:

答案 0 :(得分:0)

显然,我的环境出了问题。我尝试在另一台PC上编译相同的代码,不再有段错误了。