1

32ビットモードで32ビットPythonを使用する必要があります(Mac OS Xでは64ビットでセグフォールトしますが32ビットで動作するoracleinstantclient-10.2.0.4のため)。私が動物園の飼育係を得るまで、これまでのところすべてが順調でした。実際、ZooKeeper Pythonバインディング(zkpython)。

クライアント自体をデフォルトのまま64ビットのままにして、zkpythonを32ビットにしようとしました。しかし、この場合、インポート時にエラーが発生します。

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をコンパイルするときに、意味のある警告が1つだけ表示されるためです。

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アーチが組み込まれていないことです。そのため、このi386バージョンを「lipo」で抽出することはできません。

したがって、主な質問は、ZooKeeperのPythonバインディングを64ビットのMac OS X Lion(10.7)で32ビットのPythonで動作させる方法ですか?

2番目の質問は次のとおりです。64ビットMacOSX Lion 10.7で32ビットモードでZooKeeperを構築するにはどうすればよいですか?

4

2 に答える 2

3

私はそれを自分で修正しました。解決策は次のとおりです。http://blog.nolar.info/building-32-bit-zookeeper-python-bindings-in-64-bit-mac-os-x/(簡単に言うと、Makefileをハックして「 -arch i386 "からCC定義へ)。

于 2011-12-10T17:58:25.703 に答える
0

CFLAGSconfigureスクリプトに渡します。

export CFLAGS="-pipe -O2 -arch i386"
./configure …
于 2011-12-05T20:54:53.143 に答える