0

_sslホストアプリケーションに埋め込まれているPythonランタイムはこのコンパイラとこのバージョンで構築されているため、MSVCコンパイラを使用してWindows forPython2.6でモジュールをコンパイルしようとしています。ランタイムはWindowsでネイティブSSLサポートを備えていませんが、サポートされていないためではなく、(公式声明の中で)ライセンスがクローズドソースアプリケーションと互換性があるかどうかがまだ確認されていないためです。

PythonホームページからCPython2.6.8ソースをダウンロードし、抽出_ssl.cしてsocketmodule.h(sslモジュールソースに含める必要があります)別のフォルダーに入れました。また、sslモジュールソースとリンクするために、 openssl-for- windowswin32ビルドをダウンロードしました。

私のビルドコマンドは次のとおりです。

cl /I"C:\path\to\host\python\runtime\include" /I"include/" _ssl.c /Fo"_ssl.obj" /c
link _ssl.obj /DLL "C:\path\to\host\python\runtime\libs\python26.lib" lib/libeay32.lib lib/ssleay32.lib Ws2_32.lib /OUT:_ssl.pyd

libeay32.libおよびssleay32.libopenssl-for-windowsディストリビューションからのものです。モジュールは正常にコンパイルされ、88KBの共有ライブラリを出力します。

問題

ホストアプリケーションを起動し、最近コンパイルされたモジュールをインポートして使用するコードを実行するPythonランタイムを呼び出すコマンドを実行すると_ssl、アプリケーションがクラッシュします。ホストアプリケーションには、クラッシュ時にバグレポートを書き込む独自の種類の例外ハンドラがあります。

Exception
{
    ExceptionNumber = 0xC0000005
    ExceptionText = "ACCESS_VIOLATION"
    Address = 0x01A27058
    Thread = 4776
    Last_Error = 0x00000000
}

例外の時点でのコールスタックは、Python関連のプロシージャで終了しません。この場所でエラーが発生する前に、何か間違ったことが起こったと思います。

奇妙さ

Win32デバッガー(WinDbg)からアプリケーションを実行すると、このエラーは発生せ、すべてが正常に実行されます。

質問

モジュールのコンパイルで何が間違っているの_sslですか、またはこの例外をトリガーする可能性があるのは何ですか?

追加情報

  • 埋め込まれたPythonランタイムは次のとおりです。2.6.4 (r264:75706, Mar 6 2012, 02:32:04) [MSC v.1600 32 bit (Intel)]
4

1 に答える 1

0

クラッシュは最終的にホストアプリケーションのバグが原因でした。ただし、このバグは、データがWebからフェッチされた場合にのみ発生する可能性があり、これはsslモジュールでのみ可能でした。

于 2013-02-13T19:31:56.183 に答える