Найти - Пользователи
Полная версия: Pyrex - 'PyFrameObject' is not declared
Начало » Python для экспертов » Pyrex - 'PyFrameObject' is not declared
1
Master_Sergius
Здравствуйте. Нужно перевести библиотеку с одной платформы на другую. Библиотека сишная с интерфейсами для интерпретируемых языков, в том числе и Python. Для связки исользуется pyrex. Перевожу с Python 2.6 на Python 2.7, при попытке выполнить pyrex secret_lib.pyx ловлю такую ошибку (первой строкой в secret_lib.pyx идет include “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

С одной стороны PyFrameObject декларируется в ctypedef struct, и в строке 165 идет его же использование, должно быть как указатель на самого себя, что-то вроде односвязного списка (или Я всё забыл и вообще непонимаю что происходит). С другой стороны это может быть переоглашение существующей структуры (не уверен как это работает), то есть PyFrameObject всё же должен быть оглашен ранее.
Думал в 17-ой строке подставить “frameobject.h” или даже cdef extern from *:, но это не помогает, всё та же ошибка.
Сам файл “/usr/include/python2.7/frameobject.h” существует и внутри есть этот PyFrameObject. Что же здесь не так, как это исправить? ОС - CentOS 7.4
Shaman
Если либы все на месте, далее можно попробовать съехать с pyrex на cython.
Master_Sergius
Возможно, правда переписывать много всё равно. Я вот сделал такой ход - вместо Pyrex в Python2.7 засунул папку Pyrex из Python2.6 и этот этап прошел! Теперь лишь не выполняется Setup.py, потому что в нём указана ссылка
 extra_link_args=['/usr/lib/libstdc++.a']
, а этого файла нет. Но есть соответсвующий *.so файл, и вообще, первый раз вижу файл библиотеки с расширением “.a” - что это? yum provides /usr/lib/libstdc++.a не дал никакого результата.
Shaman
*.a - библиотеки статической компоновки, а libstdc++ - “стандратная библиотека” плюсов. В вашем случае есть вариант только для динамической компоновки. Специфика то ли версии gcc, то ли дистрибутива linux.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB