Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 27, 2018 13:12:09

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Pyrex - 'PyFrameObject' is not declared

Здравствуйте. Нужно перевести библиотеку с одной платформы на другую. Библиотека сишная с интерфейсами для интерпретируемых языков, в том числе и 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



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Офлайн

#2 Фев. 28, 2018 18:31:58

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Pyrex - 'PyFrameObject' is not declared

Если либы все на месте, далее можно попробовать съехать с pyrex на cython.

Офлайн

#3 Март 2, 2018 12:06:46

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Pyrex - 'PyFrameObject' is not declared

Возможно, правда переписывать много всё равно. Я вот сделал такой ход - вместо Pyrex в Python2.7 засунул папку Pyrex из Python2.6 и этот этап прошел! Теперь лишь не выполняется Setup.py, потому что в нём указана ссылка

 extra_link_args=['/usr/lib/libstdc++.a']
, а этого файла нет. Но есть соответсвующий *.so файл, и вообще, первый раз вижу файл библиотеки с расширением “.a” - что это? yum provides /usr/lib/libstdc++.a не дал никакого результата.



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Март 2, 2018 12:07:16)

Офлайн

#4 Март 3, 2018 08:37:52

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Pyrex - 'PyFrameObject' is not declared

*.a - библиотеки статической компоновки, а libstdc++ - “стандратная библиотека” плюсов. В вашем случае есть вариант только для динамической компоновки. Специфика то ли версии gcc, то ли дистрибутива linux.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version