winnt.h导致更新后的问题

时间:2014-03-27 02:52:26

标签: windows sdk updates

编辑:

我放弃了使SDK正常工作,而是使用MinGW提供的Windows标头。至于SDL的问题,我刚刚评论了一些关于Windows RT的内容,在我看来这可能很好,因为我从来没有打算为移动设备编译。


我最近去抓取Windows SDK 8.1来取代7.1,我必须这样做,因为我去了SDL 2.0.3以取代2.0.1,SDL现在依赖于文件“winapifamily.h”,这是只有8.x SDK而不是7.x,并没有那么大的交易...直到我去了一个我一直在努力的网络项目。我的代码不是问题,这是我的环境。现在已经设置了较新的SDK,winnt.h导致了大量问题。

C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|940|error: #error Must define a target architecture.| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|1311|error: 'EXCEPTION_DISPOSITION' does not name a type| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|1320|error: 'EXCEPTION_ROUTINE' does not name a type| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'BYTE ReadUCharAcquire(const volatile BYTE*)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8287|error: 'ReadAcquire8' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'BYTE ReadUCharNoFence(const volatile BYTE*)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8298|error: 'ReadNoFence8' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'void WriteUCharRelease(volatile BYTE*, BYTE)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8321|error: 'WriteRelease8' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'void WriteUCharNoFence(volatile BYTE*, BYTE)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8334|error: 'WriteNoFence8' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'WORD ReadUShortAcquire(const volatile WORD*)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8359|error: 'ReadAcquire16' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'WORD ReadUShortNoFence(const volatile WORD*)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8370|error: 'ReadNoFence16' was not declared in this scope| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h||In function 'void WriteUShortRelease(volatile WORD*, WORD)':| C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h|8393|error: 'WriteRelease16' was not declared in this scope| ||More errors follow but not being shown.| ||Edit the max errors limit in compiler options...| ||=== Build finished: 10 errors, 0 warnings (0 minutes, 39 seconds) ===|

我现在已经篡改了我的环境大约8个小时甚至重新安装MinGW,认为它可能有一些过时的标题或库或其他东西。这可能是我非常简单的事情,如果有人知道可能导致这些问题的原因,我将不胜感激。

Microsoft是否只编写不可靠的标头? SDK是否仅适用于Visual Studio编译器,如果是这样,为什么在许多Windows头文件中有许多字母“GNU”和“GCC”的实例,甚至是winnt.h?

1 个答案:

答案 0 :(得分:1)

我知道这有点太晚了,但对那些仍有同样问题的人来说 问题确实源于环境问题。特别是,从 include 目录指向2个不同版本的 winnt.h ,在您的情况下,可能还有 winsock2.h ,因为你说它是您正在处理的网络应用程序 背景:您的proyect中有2个 include 文件列表。一个来自您的 proyect设置,第二个来自编译器设置中定义的全局包含,按此顺序
也许,在您之前的配置中, winnt.h,winsock2.h 等取自 global 设置,它指向Mingw提供的文件,但现在,当然, ,它们位于SDK的包含路径中(也发生在我身上) 您的问题是优先级之一。 SDK中的“ windows ”文件不能与Mingw一起使用,以至于Mingw包含这些文件,但已修改。
您需要做的是,放在列表的顶部,在您的proyect设置' include目录中,您在全局设置中找到的指向Mingw提供的文件的目录,在这样的这些 windows 文件取自Mingw中包含的文件而不是SDK的方式 希望这会有所帮助。