pylibmc:未定义符号:memcached_server_list
我在使用pylibmc的时候遇到了一个问题。当我执行“import pylibmc”时,就会出现以下错误:
ImportError: /usr/local/python2.6/lib/python2.6/site-packages/_pylibmc.so: undefined symbol: memcached_server_list.
我的环境是Python 2.6.5,libmemcached 0.39,memcached 1.4.5。
那么,我该怎么解决这个问题呢?
非常感谢。
更新 1: 我又看了一遍pylibmc的文档,发现这样写:libmemcached 0.32或更高版本(最后测试的是0.38)。所以我猜我的libmemcached可能太新了,不兼容。
更新 2: 我测试了libmemcached 0.38,结果在_pylibmc.so中又出现了另一个错误:未定义的符号:memcached_server_count。
3 个回答
听起来像是链接器的问题。你是在什么系统上?_pylibmc.so是怎么和libmemcached.so链接的?你能提供一下构建阶段运行的命令吗?还有,能不能给我看看ldd的输出?
我之前也遇到过同样的问题,后来我通过使用libmemcached 0.34这个版本解决了。然后我把环境变量LD_LIBRARY_PATH设置成了/usr/local/lib,这个路径是libmemcache库存放的地方。
关于符号 memcached_server_list,似乎有些混淆。libmemcached 0.38 版本中有这个符号,但在 0.39 版本中就没有了。这个符号甚至在文档中也被删除了。pylibmc 这个库依赖 memcached_server_list 来实现它的 get_stats() 方法。我怀疑 pylibmc 应该使用 memcached_server_cursor 来代替。
所以我认为我们可以说,pylibmc 1.0 需要使用 libmemcached 版本小于等于 0.38。