0

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

我已经从 Python 主页下载了CPython 2.6.8 源并将其提取_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.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)]
4

1 回答 1

0

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

于 2013-02-13T19:31:56.183 回答