使用MSVC编译_ssl,主机应用程序崩溃(不在调试器中!)

时间:2013-02-10 22:18:00

标签: python windows debugging visual-c++ access-violation

我正在尝试使用MSVC编译器在Windows上为Python 2.6编译_ssl模块,因为嵌入到主机应用程序中的Python运行时是使用此编译器和此版本构建的。运行时没有Windows上的本机ssl支持,但不是因为它不受支持,而是因为(在官方声明中)尚未检查许可证与闭源应用程序兼容。

我已经从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-for-windows发行版。该模块编译良好并输出一个88KB的共享库。

问题

当我启动主机应用程序并运行一个命令,调用Python运行时运行代码导入并使用最近编译的_ssl模块时,应用程序崩溃。主机应用程序有自己的异常处理程序在崩溃时编写bug报告。

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)]

1 个答案:

答案 0 :(得分:0)

崩溃最终是由于主机应用程序中的错误。但是,只有在从Web获取数据时才会出现此错误,这只能通过ssl模块实现。