我使用Cython 0.19.2(和Python 2.7.1)将C ++类公开给Python。
作为第一次尝试,我使用文档的'Rectangle'类示例进行了测试。
http://docs.cython.org/src/userguide/wrapping_CPlusPlus.html
我有一个我不明白的崩溃。
我试图最大限度地简化代码。但我仍然有问题。
这是我的pyx文件,C ++源代码只是来自python / cython文档的剪切和粘贴。
# distutils: language = c++
# distutils: sources = Rectangle.cpp
cdef extern from "Rectangle.h" namespace "shapes":
cdef cppclass Rectangle:
pass
cdef class PyRectangle:
cdef Rectangle* thisptr
我只想声明一个带有thisptr的类,它指向C ++ Rectangle类实例。
当我尝试用以下代码编译程序时:
cython -a --cplus rect.pyx
我遇到了以下崩溃:
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'
我尝试使用pyrex,setup.py,...编译所有内容。但我仍然有同样的错误。
我有什么遗失的吗?
由于
答案 0 :(得分:2)
好吧,我终于修好了。我的Python 2.7.1版本不适用于最后一个Cython 0.19.2。我升级到2.7.6并且有效。