Skip to main content
 首页 » 编程设计

python之如何在Mac OS X 10.7 Lion中以32位模式构建zookeeper/zkpython

2024年01月12日34think

我应该在32位模式下使用32位Python(由于oracle instantclient-10.2.0.4,它在Mac OS X中的64位中出现段错误,但在32位中工作)。到目前为止一切都很好,直到我有了动物园管理员。实际上,ZooKeeper Python 绑定(bind) (zkpython)。

我尝试将 zkpython 设为 32 位,同时保持客户端本身默认为 64 位。但在这种情况下,我在导入时遇到错误:

Python 2.6.7 (r267:88850, Jul 31 2011, 19:30:54)  
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
>>> import zookeeper 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
ImportError: dlopen(./zookeeper.so, 2): Symbol not found: _ZOO_ASSOCIATING_STATE 
  Referenced from: /Users/nolar/Downloads/zoo/zookeeper.so 
  Expected in: flat namespace 
 in /Users/nolar/Downloads/zoo/zookeeper.so 

Python 2.7 也是如此(这里 2.6 和 2.7 都是 32 位,sys.maxint==2147483647)。我猜它需要 32 位 Zookeeper 客户端,因为编译 zkpython 时它只显示一个有意义的警告:

ld:警告:忽略文件../../..//src/c/.libs//libzookeeper_mt.dylib,该文件是为不受支持的文件格式构建的,该格式不是正在链接的体系结构(i386)

所以,我尝试使 Zookeeper 客户端本身成为 32 位。但是无论我尝试什么,我都无法以 32 位模式构建它:libzookeeper_mt.2.dylib 始终是 64 位(我尝试了 ARCH_FLAGS ="-arch i386"、configure --build=i386 --host=i386、arch -i386 …等 — .dylib 始终是 64 位)。

$ file libzookeeper_mt.2.dylib  
libzookeeper_mt.2.dylib: Mach-O 64-bit dynamically linked shared library x86_64 

这里最糟糕的一点是它没有内置 i386 架构,所以我无法使用“lipo”提取这个 i386 版本。

所以,主要问题是:如何使 ZooKeeper python 绑定(bind)在 64 位 Mac OS X Lion (10.7) 中与 32 位 Python 一起使用?

第二个问题是:如何在 64 位 Mac OS X Lion 10.7 中以 32 位模式构建 ZooKeeper?

请您参考如下方法:

我自己已经解决了这个问题。解决方案如下:http://blog.nolar.info/building-32-bit-zookeeper-python-bindings-in-64-bit-mac-os-x/ (简而言之,破解你的 Makefile 以将“-arch i386”添加到那里的 CC 定义中)。