我正在尝试_ssl
使用 MSVC 编译器在 Windows 上为 Python 2.6 编译模块,因为嵌入到主机应用程序中的 Python 运行时是使用此编译器和此版本构建的。但是,运行时在 Windows 上不附带本机 ssl 支持,不是因为它不受支持,而是因为(在官方声明中)许可证尚未经过检查以与闭源应用程序兼容。
我已经从 Python 主页下载了CPython 2.6.8 源并将其提取_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
的模块的命令时,应用程序崩溃。宿主应用程序有自己的异常处理程序,在崩溃时会编写错误报告。
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)]