2017-02-03 2 views
1

Ich versuche, mein eigenes Python-Modul mit Visual Studio 2015 mit Boost Python zu erstellen. Wenn ich versuche, das Modul auf Windows XP zu importieren, ich diesen Fehler:Boost Python-Modul funktioniert nicht auf Windows XP

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

ich alles versucht, ich finden konnte, um meinen Boost-Python Build kompatibel mit Windows XP wie mit dieser Option zu machen:

b2 release define=BOOST_USE_WINAPI_VERSION=0x0501 

wie hier beschrieben Boost Version 1.60.0. Oder Umgebungsvariablen vor Aufruf b2 setzen.

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%" 

wie hier descirbed: Windows XP Targeting with C++ in Visual Studio 2012

Wie kann ich die DLL erhalten unter Windows XP zu arbeiten?

Antwort

1

Nach einiger mehr Untersuchung kam ich zu dieser Schlussfolgerung:

Visual Studio 2015 Compiler Verhalten für Windows XP hat sich geändert. Ich fand die Erklärung für das Verhalten here:

"Wir haben eine Shell-Erweiterung-DLL, die nach einem Upgrade auf Visual Studio 2015 in ein Problem laufen, weil die neue Magic Static implizite TLS unter der Haube verwendet."

Dies bedeutet, VS2015 Compiler wird TLS verwenden, aber dieser Speicher wird nicht ordnungsgemäß auf Windows XP initialisiert. Boost.Python wird daher wegen nicht initialisierter statischer Variablen abstürzen.

Es gibt eine Abhilfe: „Eine Abhilfe ist /Zc:threadSafeInit- Compiler-Schalter zu verwenden, solange Sie auf magische Statiken Funktionalität nicht anders verlasse“

Hoffe das hilft anderen, die Windows XP unterstützen müssen