0

Я пытаюсь установить пакет Python cryptography в систему Solaris 10. Я создал Python 2.7 и libffi из исходного кода в моем домашнем каталоге. Я могу построить cffi, указав путь к libffi:Установка пакета криптографии Python из источника в Solaris 10

$ python setup.py build_ext --include-dirs ~/libffi/lib/libffi-3.2.1/include --library-dirs ~/libffi/lib 

Однако попытки построить криптографию неудачу с этой ошибкой:

ImportError: ld.so.1: python: fatal: relocation error: file /export/home/ef/python/lib/python2.7/site-packages/cffi-1.9.1-py2.7-solaris-2.10-sun4v.32bit.egg/_cffi_backend.so: symbol __sync_synchronize: referenced symbol not found 

Я поставил LD_LIBRARY_PATH в /export/home/ef/libffi/lib.

Я замечаю следующее предупреждение, когда компилирую cffi - не может быть это связано?

c/call_python.c:219: warning: implicit declaration of function `__sync_synchronize' 

Как это разрешить? Все подобные проблемы, которые я нашел в Интернете, были исправлены путем установки соответствующих пакетов ОС (e.g.sudo apt-get install build-essential libssl-dev libffi-dev python-dev). OpenCSW не является вариантом.

ответ

0

__sync_synchronize - это встроенная функция, но поддерживается только gcc и clang. Думаю, вы используете другой компилятор или очень старую версию gcc или clang. Можете ли вы попытаться установить из cffi trunk? Недавно мы добавили поддержку некоторых других компиляторов (еще не выпущенных, будет в версии 1.10).

https://bitbucket.org/cffi/cffi/downloads?tab=branches, загрузите ветвь «по умолчанию» (например, нажав gz).

+0

Спасибо за ваш ответ. Я использую gcc версии 3.4.3. Я собрал cffi из туловища (cffi-cffi-3234afed406d.tar.gz), как было предложено. Тем не менее, я все еще получаю такую ​​же фатальную ошибку при перемещении, когда я пытаюсь построить криптографию. – ef99

+0

Это действительно очень старый gcc. Я должен добавить проверку версии, если я узнаю, в какой версии был добавлен '' __sync_synchronize() ''. Тем временем вы можете редактировать файл '' call_python.c'' строку 180, заменяя '' #if defined (__ GNUC __) '' на '' #if 0'' (тогда вы получаете предупреждение, которое вы можете игнорировать, если вы «Не выполняйте многопоточную инициализацию во встроенном режиме) –

+0

Это отлично работает, спасибо. Гораздо проще, чем обновить gcc! :) – ef99