2010-08-04 95 views
5

我想编译一个包含windows.h使用铛编译器的小项目。不幸的是,clang产生了一些我无法解决的错误。什么导致这些错误?锵不支持所有必需的功能,我错过了什么?Windows.h和铛(LLVM)

In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind 
ows.h:155: 
In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind 
ef.h:177: 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winnt.h(12857) : warning: 

    expression result unused [-Wunused-value] 
UNREFERENCED_PARAMETER(CallbackEnviron); 
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winnt.h:12857:28: note: in 
stantiated from: 
UNREFERENCED_PARAMETER(CallbackEnviron); 
         ^~~~~~~~~~~~~~~ 

In file included from C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/wind 
ows.h:156: 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2326) : error: 

    invalid operands to binary expression ('LONGLONG' (aka 'double') and 
    'LONGLONG') 
             Old & Value, 
             ~~~^~~~~~ 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2327) : error: 

    expected ')' 
             Old) != Old); 
             ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2325) : note: 
    to match this '(' 
} while (InterlockedCompareExchange64(Destination, 
     ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2344) : error: 

    invalid operands to binary expression ('LONGLONG' (aka 'double') and 
    'LONGLONG') 
             Old | Value, 
             ~~~^~~~~~ 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2345) : error: 

    expected ')' 
             Old) != Old); 
             ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2343) : note: 
    to match this '(' 
} while (InterlockedCompareExchange64(Destination, 
     ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2362) : error: 

    invalid operands to binary expression ('LONGLONG' (aka 'double') and 
    'LONGLONG') 
             Old^Value, 
             ~~~^~~~~~ 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2363) : error: 

    expected ')' 
             Old) != Old); 
             ^
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include/winbase.h(2361) : note: 
    to match this '(' 
} while (InterlockedCompareExchange64(Destination, 
     ^

...and a lot more... 

回答

3

您可能需要定义UNREFERENCED_PARAMETER宏的铿锵兼容版本。像这样的东西应该可以帮助你:http://sourcefrog.net/weblog/software/languages/C/unused.html

此外,看起来类型LONGLONG被定义为clang的double类型,并且你不能在浮点数上执行二进制算术(和,或不等)。您需要确保这是typedefed作为一个适当的整数类型。

根据关于如何构建windows.h,winbase.h和winnt.h的一些信息,您可以使自己的包装器得到正确的定义以实现此传递。否则,尝试找到一个与gcc兼容的windows.h版本,并使用它。 Clang应该与它兼容。

祝你好运!

+0

这对我的小项目来说很麻烦。但感谢您的帮助! – mort 2010-08-04 11:58:42