在使用 MinGW5.14 编译 QT4.4.3 时,编译一开始就会报函数原型定义冲突的错误,这是因为 MinGW 的 w32api 包中的 "include/winbase.h" 文件与 QT 中的声明不一致。解决方法如下:
打开 $(QTDIR)/src/corelib/arch/qatomic_windows.h,找到其中的
extern "C" {
__declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long);
__declspec(dllimport) long __stdcall InterlockedIncrement(long *);
__declspec(dllimport) long __stdcall InterlockedDecrement(long *);
__declspec(dllimport) long __stdcall InterlockedExchange(long *, long);
__declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long);
}
在这段代码前后分别加上预编译条件
#ifndef __INTERLOCKED_DECLARED
#define __INTERLOCKED_DECLARED
和
#endif
参见 QT4.5.1 的源代码就是这样解决的。
打开 $(QTDIR)/src/corelib/arch/qatomic_windows.h,找到其中的
extern "C" {
__declspec(dllimport) long __stdcall InterlockedCompareExchange(long *, long, long);
__declspec(dllimport) long __stdcall InterlockedIncrement(long *);
__declspec(dllimport) long __stdcall InterlockedDecrement(long *);
__declspec(dllimport) long __stdcall InterlockedExchange(long *, long);
__declspec(dllimport) long __stdcall InterlockedExchangeAdd(long *, long);
}
在这段代码前后分别加上预编译条件
#ifndef __INTERLOCKED_DECLARED
#define __INTERLOCKED_DECLARED
和
#endif
参见 QT4.5.1 的源代码就是这样解决的。