Cython crash from documentation example

2019-08-08 19:01发布

问题:

I use Cython 0.19.2 (and Python 2.7.1) to expose C++ classes to Python.

As a first try, i did a test with the 'Rectangle' class example of the documentation.

http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html

I have a crash which I don't understand.

I have tried to simplify the code the the max. but I still have the problem.

Here is my pyx file, the C++ sources are just a cut&paste from the python/cython's documentation.

# distutils: language = c++
# distutils: sources = Rectangle.cpp

cdef extern from "Rectangle.h" namespace "shapes":
  cdef cppclass Rectangle:
    pass

cdef class PyRectangle:
  cdef Rectangle* thisptr

I just want to declare a class with a thisptr, which points the the C++ Rectangle class instance.

When i try to compile the program with:

cython -a --cplus rect.pyx

I have the following crash:

Error compiling Cython file:
------------------------------------------------------------
...
cdef extern from "Rectangle.h" namespace "shapes":
  cdef cppclass Rectangle:
    pass

cdef class PyRectangle:
  cdef Rectangle* thisptr
      ^
------------------------------------------------------------

rect.pyx:9:7: Compiler crash in AnalyseDeclarationsTransform

File 'ModuleNode.py', line 101, in analyse_declarations: ModuleNode(rect.pyx:1:0,
    full_module_name = 'rect')
File 'Nodes.py', line 382, in analyse_declarations: StatListNode(rect.pyx:4:0)
File 'Nodes.py', line 4251, in analyse_declarations: CClassDefNode(rect.pyx:8:5,
    as_name = u'PyRectangle',
    class_name = u'PyRectangle',
    module_name = u'',
    visibility = u'private')
File 'Nodes.py', line 382, in analyse_declarations: StatListNode(rect.pyx:9:7)
File 'Nodes.py', line 1208, in analyse_declarations: CVarDefNode(rect.pyx:9:7,
    modifiers = [...]/0,
    visibility = u'private')

Compiler crash traceback from this point on:
  File "/home/xxx/local/python2.7.1/site-packages/Cython/Compiler/Nodes.py", line 1208, in analyse_declarations
self.entry.doc = embed_position(self.pos, self.doc)
AttributeError: 'CVarDefNode' object has no attribute 'doc'

I have tried to compile with pyrex, setup.py, ... everything. But I still have the same error.

Is there something I'm missing?

Thanks

回答1:

Alright, I finally fixed it. My version of Python 2.7.1 simply doesn't work with the last Cython 0.19.2. I upgraded to 2.7.6 and it works.