-
Bug
-
Resolution: Done
-
P2: Important
-
4.4.1
-
None
-
32507afe1125abf122435946dcd58a9d0d5d6ff1
Qt does not compile with MinGW using w32api.h version 3.12.
The error could be:
/opt/cross/4.4.3/include/QtCore/../../src/corelib/arch/qatomic_windows.h:371: Fehler: Deklaration der C-Funktion »long int InterlockedCompareExchange(long int*, long int, long int)« steht in Konflikt mit
/opt/cross/mingw345/usr/local/include/winbase.h:1663: Fehler: vorherige Deklaration »long int InterlockedCompareExchange(volatile long int*, long int, long int)«
or
/opt/cross/4.4.3/include/QtCore/../../src/corelib/arch/qatomic_windows.h:371: Fehler: Deklaration der C-Funktion »long int InterlockedCompareExchange(long int*, long int, long int)« steht in Konflikt mit
/opt/cross/mingw345/usr/local/include/winbase.h:1663: Fehler: vorherige Deklaration »LONG InterlockedCompareExchange(volatile LONG*, LONG, LONG)«
A possible fix is:
diff --git a/src/corelib/arch/qatomic_windows.h b/src/corelib/arch/qatomic_windows.h
index fa147ff..8eaac40 100644
— a/src/corelib/arch/qatomic_windows.h
+++ b/src/corelib/arch/qatomic_windows.h
@@ -376,7 +376,11 @@ Q_INLINE_TEMPLATE T *QBasicAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueTo
#else
extern "C" {
+#if defined(Q_CC_MINGW) && __MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION > 12
__declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long);
+#else
+ __declspec(dllimport) long __stdcall InterlockedCompareExchange(volatile long *, long, long);
+#endif
__declspec(dllimport) long __stdcall InterlockedIncrement(long *);
__declspec(dllimport) long __stdcall InterlockedDecrement(long *);
__declspec(dllimport) long __stdcall InterlockedExchange(long *, long);