2

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バージョンをデフォルトにシンボリックリンクしようとしましたが、うまくいきませんでした。何か案は?

4

1 に答える 1

2

いくつかの助け、提案、エラーの説明がありますが、おそらく完全な答えではありません:

OpenSSL @ https://github.com/mxcl/homebrew/blob/master/Library/Formula/openssl.rbの Brew レシピを見ると、ビルドした OpenSSL が 64 ビットのみである可能性が高いようです。Python 用の拡張機能をビルドする場合、OS の既定の Python に対してビルドすると、通常、ユニバーサル バイナリ (i386+x86_64) をビルドした場合にのみ正しく機能します。

OSX は、安全にビルドできる 10.9 SDK でデフォルトで OpenSSL を提供しますが、いくつかの問題を引き起こす可能性のある新しい OpenSSL が必要な場合。

これをデバッグするためのいくつかのトリック:

  1. 「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)ではないと言うでしょう。

  2. export DYLD_INSERT_LIBRARIES=/usr/local/lib/$WHATEVER_LIBOPENSSLS_FILENAME_IS によって、OpenSSL ライブラリを共有 lib プリロード リストに追加します。

他のいくつかの考え-「フラットな名前空間で期待される」問題は、通常、コンパイル時に ld -flat_namespace を渡すことで解決されます。そうでない場合、これはデフォルトで発生するはずです-それはちょっと奇妙です。これは、10.5 または 10.6 以降、OSX 上の Python の「標準的な」問題ではありませんでした。

M2Crypto は多くのアクティビティを見ていません。最後のコミットは 2011 年でした。必要に応じて、個人的に別の暗号ライブラリに切り替えたいと思います。

- - 編集 - -

これを試して、make distclean (または make clean のいずれか) を実行します。

次にこれを試してください:

このブロブを 'make' の最後までカット アンド ペーストするだけです。これは 1 つのコマンドです。

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 と同じくらい古いものでは、それが必要になる場合があります。

于 2013-11-02T08:51:40.263 に答える