我正在尝试使用boost python在visual studio 2015中创建自己的python模块。当我尝试在Windows XP上导入模块时,我收到此错误:
ImportError: DLL load failed: Invalid access to memory location.
我尝试了所有可以找到的东西,使我的boost 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\7.1A\Include;%INCLUDE%"
set "PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%"
set "LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.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下运行?
答案 0 :(得分:1)
经过一番调查,我得出了这个结论:
Visual Studio 2015编译器行为已针对Windows XP进行了更改。我找到了行为here的解释:
"我们有一个shell扩展dll在升级到Visual Studio 2015后遇到问题,因为新的Magic Static在引擎盖下使用隐式TLS。"
这意味着,VS2015编译器将使用TLS,但此存储将无法在Windows XP上正确初始化。因此,由于未初始化的静态变量,Boost.Python将崩溃。
有一种解决方法:
"解决方法是使用编译器开关/Zc:threadSafeInit-
,只要您不依赖Magic Statics功能。"
希望这有助于其他必须支持Windows XP的用户