Boost python 模块无法在 windows xp 上运行

Boost python module not working on windows xp

我正在尝试用 visual studio 2015 使用 boost python 创建我自己的 python 模块。当我尝试在 windows xp 上导入模块时,出现此错误:

ImportError: DLL load failed: Invalid access to memory location.

我尝试了我能找到的一切,使我的提升 python 构建与 windows xp 兼容,例如使用此选项:

b2 release define=BOOST_USE_WINAPI_VERSION=0x0501

如此处所述Boost Version 1.60.0。或者在callig b2之前设置环境变量。

set "INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows.1A\Include;%INCLUDE%"
set "PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows.1A\Bin;%PATH%"
set "LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows.1A\Lib;%LIB%"
set "CL=/D_USING_V110_SDK71_;%CL%"
set "LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%"

如此处所述:Windows XP Targeting with C++ in Visual Studio 2012

如何让 dll 在 Windows XP 下工作?

经过更多的调查,我得出了这个结论:

Visual Studio 2015 编译器行为已针对 Windows XP 进行更改。我找到了 here:

行为的解释

"We have a shell extension dll that run into a problem after upgrading to Visual Studio 2015 because the new Magic Static uses implicit TLS under the hood."

这意味着,VS2015 编译器将使用 TLS,但此存储不会在 Windows XP 上正确初始化。 Boost.Python 因此会因为未初始化的静态变量而崩溃。

有一个解决方法:

"A workaround is to use compiler switch /Zc:threadSafeInit- as long as you do not otherwise rely on Magic Statics functionality."

希望这对必须支持 Windows XP

的其他人有所帮助