Форум сайта python.su
Здравствуйте. Нужно перевести библиотеку с одной платформы на другую. Библиотека сишная с интерфейсами для интерпретируемых языков, в том числе и 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
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
Офлайн
Если либы все на месте, далее можно попробовать съехать с pyrex на cython.
Офлайн
Возможно, правда переписывать много всё равно. Я вот сделал такой ход - вместо Pyrex в Python2.7 засунул папку Pyrex из Python2.6 и этот этап прошел! Теперь лишь не выполняется Setup.py, потому что в нём указана ссылка
extra_link_args=['/usr/lib/libstdc++.a']
Отредактировано Master_Sergius (Март 2, 2018 12:07:16)
Офлайн
*.a - библиотеки статической компоновки, а libstdc++ - “стандратная библиотека” плюсов. В вашем случае есть вариант только для динамической компоновки. Специфика то ли версии gcc, то ли дистрибутива linux.
Офлайн