2013-02-10 62 views
0

我想編譯_ssl模塊在Python 2.6使用MSVC編譯器,因爲嵌入到宿主應用程序的Python運行時是用這個編譯器和這個版本。然而,運行時並沒有在Windows上帶有本地ssl支持,並不是因爲它不受支持,而是因爲(在官方聲明中)許可證尚未被檢查爲與閉源應用程序兼容。編譯_ssl與MSVC,主機應用程序崩潰(不在調試器!)

我已經從Python主頁下載了CPython 2.6.8 source,並將_ssl.csocketmodule.h(需要包含在ssl模塊源文件中)解壓縮到單獨的文件夾中。我還下載了openssl-for-windows win32版本,以便將它與ssl模塊源碼結合起來。

我的集結命令如下:

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.libssleay32.lib來自OpenSSL的換窗分佈。該模塊編譯得很好,並輸出一個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)]
+0

VS C編譯器對調試版和發佈版使用不同的C運行時庫,這可能是調試器中原始問題和古怪問題的線索。基本上_everything_,包括openssl-for-windows發行版和Python本身,必須被編譯爲使用相同版本的運行時庫。它們都必須使用相同版本的VS進行編譯。 – martineau 2013-02-11 04:35:08

回答

0

崩潰,最終是由於主機應用程序中的錯誤。但是這個錯誤可能只發生在數據從網絡中獲取時,這隻能通過ssl模塊來實現。