星期六, 二月 21, 2009

Qt4.43与MinGW5.14的使用问题

        使用最新版本的Qt和MinGW编译,会出现错误,Qt 目录下的 "\src\corelib\arch\qatomic_windows.h" 与 MinGW 目录下的 "\include\winbase.h" 中有部分函数发生了原型冲突(prototype conflict;也就是相同的函数被重复定义了两次。这是在w32api-3.12之后版本就与Qt产生的冲突,解决方案如下:
打开Qt目录下的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
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);
}
#endif
这样修改过后就不会再有问题了。

没有评论: