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
的其他人有所帮助
我正在尝试用 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
的其他人有所帮助