0

我正在尝试将一个基于 c 的秘密库从 CentOS 6.5/Python 2.6 迁移到 CentOS 7.4/Python 2.7。这个库有基于 Pyrex 的 python 接口。

问题是,当我执行“pyrex secret_lib.pyx”(该文件的第一行 - 包括“python.pxi”)时,我收到以下错误:

python.pxi:165:8 'PyFrameObject' is not declared
python.pxi:165:8 'PyFrameObject' is not a type identifier

python.pxi的内容:

 17 cdef extern from "Python.h":
...
164     ctypedef struct PyFrameObject:                                              
165         PyFrameObject *f_back                                                   
166         PyCodeObject  *f_code                                                   
167         PyObject *f_builtins                                                    
168         PyObject *f_globals                                                     
169         PyObject *f_locals                                                      
170         PyObject *f_trace                                                       
171         PyObject *f_exc_type                                                    
172         PyObject *f_exc_value                                                   
173         PyObject *f_exc_traceback                                               
174         int f_lasti                                                             
175         int f_lineno                                                            
176         int f_restricted                                                        
177         int f_iblock                                                            
178         int f_nlocals                                                           
179         int f_ncells                                                            
180         int f_nfreevars                                                         
181         int f_stacksize

所以,这是这一行 - “165 PyFrameObject *f_back”和同名的结构。看起来像 c 中的链表,为什么它没有定义?或者在 Pyrex 中,这意味着扩展预定义的结构“PyFrameObject”——在这种情况下,它可能会导致错误。但为什么?

我什至尝试修改第 17 行(3 个不同的变体):

1) cdef extern from "Python.h, frameobject.h":
2) cdef extern from "frameobject.h":
3) cdef extern from *:

,但没有帮助。在这个文件-“/usr/include/python2.7/frameobject.h”中我们可以找到这个“PyFrameObject”,那么,有什么问题呢?

4

1 回答 1

1

对我来说,这看起来像是一个“前向声明”问题。

(我相信)当第 165 行正在执行时 -PyFrameObject尚未定义(它将在第 181 行之后 - 但尚未定义)。

要解决此问题,请尝试告诉编译器它将通过创建前向声明来定义。

在互联网上搜索可能会有所帮助,例如https://www.mail-archive.com/cython-dev@codespeak.net/msg03160.html

于 2018-03-05T13:27:00.450 回答