我正在尝试使用MSVC编译器在Windows上为Python 2.6编译_ssl
模块,因为嵌入到主机应用程序中的Python运行时是使用此编译器和此版本构建的。运行时没有Windows上的本机ssl支持,但不是因为它不受支持,而是因为(在官方声明中)尚未检查许可证与闭源应用程序兼容。
我已经从Python主页下载了CPython 2.6.8 source,并将_ssl.c
和socketmodule.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.lib
和ssleay32.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
模块或者触发此异常的原因我做错了什么?
其他信息
2.6.4 (r264:75706, Mar 6 2012, 02:32:04) [MSC v.1600 32 bit (Intel)]
答案 0 :(得分:0)
崩溃最终是由于主机应用程序中的错误。但是,只有在从Web获取数据时才会出现此错误,这只能通过ssl模块实现。