当我尝试使用Python 2.7.5导入M2crypto时,出现以下错误ImportError: dlopen(/Users/user/.python-eggs/M2Crypto-0.21.1-py2.7-macosx-10.9-intel.egg-tmp/M2Crypto/__m2crypto.so, 2): Symbol not found: _PEM_read_bio_SSL_SESSION Referenced from: /Users/user/.python-eggs/M2Crypto-0.21.1-py2.7-macosx-10.9-intel.egg-tmp/M2Crypto/__m2crypto.so Expected in: flat namespace in /Users/user/.python-eggs/M2Crypto-0.21.1-py2.7-macosx-10.9-intel.egg-tmp/M2Crypto/__m2crypto.so
我使用brew安装OpenSSL,但是我感觉这是导致错误的原因。我还尝试将OpenSSL的brew版本符号链接到默认但没有运气。有任何想法吗?
最佳答案
一些帮助,建议,错误的解释,但可能没有完整的答案:
查看OpenSSL @ https://github.com/mxcl/homebrew/blob/master/Library/Formula/openssl.rb的Brew配方,您构建的OpenSSL很可能仅是64位。在构建Python扩展时,如果针对操作系统默认的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)
通过导出DYLD_INSERT_LIBRARIES = / usr / local / lib / $ WHATEVER_LIBOPENSSLS_FILENAME_IS将OpenSSL库添加到共享库预加载列表中
还有其他一些想法-“在平面名称空间中出现预期”问题通常可以通过在编译时传递ld -flat_namespace来解决。如果不是这样,默认情况下应该发生这种情况-那有点奇怪。从10.5或10.6开始,这在OSX上就不是Python的“标准”问题。
M2Crypto的活动并不多,上一次提交是在2011年。我个人会根据您的需要切换到其他crypto lib。
-编辑-
尝试执行此操作,进行distclean(或进行清洁,以任何一个为准)
然后试试这个:
只需将这个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这样古老的标志,可能会需要它。
关于python - OpenSSL和M2crypto无法在OS X Mavericks上一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19737207/