Я создаю приложение (на Python) на Amazon EC2 со следующей цепочкой зависимостей:
gevent-websocket
--->
Gevent--->
Libevent
Последний (libevent) был обновлен в воскресенье, и теперь мой сервер генерирует эту ошибку:
(...)
File "/usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/__init__.py", line 41, in <module>
from gevent import core
ImportError: libevent-1.4.so.2: cannot open shared object file: No such file or directory
Не желая тратить много времени на эту проблему, я попытался смягчить ее, создав символическую ссылку на всегда актуальную версию:
$ sudo ln -s /usr/lib64/libevent.so /usr/lib64/libevent-1.4.so.2
Но это не совсем сработало:
(...)
File "/usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/__init__.py", line 41, in <module>
from gevent import core
ImportError: /usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg/gevent/core.so: undefined symbol: current_base
Я немного озадачен, как действовать дальше. Стоит ли создавать больше символических ссылок? К чему? Или есть способ лучше решить эту проблему ...
PS. Для записи я использую Amazon AMI.
В обновлении libevent было добавлено изменение версии библиотеки ABI (вы, вероятно, найдете libevent-1.4.so.3
). Вы не можете просто создать символическую ссылку, потому что двоичные файлы, созданные против предыдущего ABI, не будут работать (следовательно, undefined symbol: current_base
ошибка). Вам необходимо пересобрать gevent для новой версии библиотеки. Похоже, вы установили его из архива яйца или исходного кода, поэтому удалите текущий модуль (удалите /usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg
) и установите его снова.