我正在尝试将一个基于 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”,那么,有什么问题呢?