_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.lib
openssl-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)]