处理 Amazon AWS 上的 libevent 升级

处理 Amazon AWS 上的 libevent 升级

我正在 Amazon EC2 上构建一个具有以下依赖链的应用程序(使用 Python):

gevent-websocket ---> 吉文特 ---> 自由事件

最后一个(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。

答案1

libevent 升级引入了库 ABI 版本冲突(您可能会发现libevent-1.4.so.3)。您不能只创建符号链接,因为针对以前的 ABI 构建的二进制文件将无法工作(因此出现错误undefined symbol: current_base)。您需要针对新的库版本重建 gevent。看起来您是从 egg 或源 tarball 安装的,因此请删除当前模块(删除/usr/lib/python2.6/site-packages/gevent-0.13.7-py2.6-linux-x86_64.egg)并重新安装。

相关内容