一些帮助、建议、对错误的解释,但可能不是完整的答案:
查看 OpenSSL 的 Brew 配方 @ https://github.com/mxcl/homebrew/blob/master/Library/Formula/openssl.rb,您构建的 OpenSSL 似乎很可能只有 64 位。在为 Python 构建扩展时,如果您针对 OS 默认 Python 构建,它通常仅在您构建通用二进制文件 (i386+x86_64) 时才能正常工作
OSX 默认在 10.9 SDK 中提供 OpenSSL,您可以安全地构建它,但如果您需要更新的 OpenSSL,可能会导致一些问题。
调试这个的几个技巧:
运行 'file /Users/user/.python-eggs/M2Crypto-0.21.1-py2.7-macosx-10.9-intel.egg-tmp/M2Crypto/__m2crypto.so' 以了解您的库是如何构建的。我敢打赌它只会说 x86_64 共享库,而不是胖共享库(i386 + x86_64)
通过 export DYLD_INSERT_LIBRARIES=/usr/local/lib/$WHATEVER_LIBOPENSSLS_FILENAME_IS 将您的 OpenSSL 库添加到共享库预加载列表
其他一些想法 - 'expected in flat namespace' 问题通常通过在编译时传递 ld -flat_namespace 来解决。这应该默认发生,如果不是 - 这有点奇怪。自 10.5 或 10.6 以来,这一直不是 OSX 上的 Python 的“标准”问题。
M2Crypto 没有看到很多活动,最后一次提交是在 2011 年。我个人会根据您的需要切换到不同的加密库。
- - 编辑 - -
试试这个,做一个 make distclean (或 make clean,无论哪个)
然后试试这个:
只需将此 blob 剪切并粘贴到“make”的末尾 - 这是一个命令:
SDK_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/" \
LDFLAGS="-isysroot ${SDK_DIR}" \
CPPFLAGS="-I${SDK_DIR}/usr/include -isysroot ${SDK_DIR}" \
CFLAGS="-I${SDK_DIR}/usr/include -isysroot ${SDK_DIR}" \
./configure && make
如果这不起作用,请将以下标志添加到 CFLAGS 和 LDFLAGS
-flat_namespace -undefined suppress
再试一次?我很确定你不应该再使用这些标志中的任何一个,但对于像 M2Crypto 这样古老的东西,它可能需要它。