在编译Code :: Blocks中的SDL时,“winapifamily.h:没有这样的文件或目录”

我遵循LazyFoo的SDL2.0教程,使用Code :: Blocks 13.12。 我没有遇到任何问题,使SDL2链接并运行在VS2010中,但已经改变了IDE,并遇到这个错误:

winapifamily.h:没有这样的文件或目录

我认为一切正确。 我已经将程序指向了我的SDL2 include和lib目录。

Buildlog 🙁错误发生在文件中:.. \ include \ SDL2 \ SDL_platform.h)

===构build:SDL2_Setup中的debugging(编译器:GNU GCC编译器)===

致命错误:winapifamily.h:没有这样的文件或目录

===构build失败:1个错误,0个警告(0分钟,0秒)===

这是我第一次在这里问一个问题。 我做了Google的回答,并在这里search现有的问题/答案,但无法解决问题。 这也是我的代码。

我的代码:

// Using SDL and standard IO #include <SDL.h> #include <stdio.h> // Screen dimension constants const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main( int argc, char* args[] ) { // The window we'll be rendering to SDL_Window* window = NULL; // The surface contained by the window SDL_Surface* screenSurface = NULL; // Initialize SDL if( SDL_Init( SDL_INIT_VIDEO) < 0 ) { printf( "SDL could not initialize! SDL_GetError: %s\n", SDL_GetError() ); } else { // Create window window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); if( window == NULL ) { printf( "Window could not be created! SDL_GetError: %s\n", SDL_GetError() ); } else { // Get window surface screenSurface = SDL_GetWindowSurface( window ); // Fill the surface white SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF)); // Update the surface SDL_UpdateWindowSurface( window ); // Wait two seconds SDL_Delay( 2000 ); } } // Destroy window SDL_DestroyWindow( window ); // Quit SDL subsystems SDL_Quit(); return 0; } 

更新 :SDL 2.0.4现在已经出来,包括这个bug的修复,可以从http://libsdl.org/download-2.0.php下载。;


这是SDL 2.0.3中的一个错误。 SDL的下一个版本已经提交了一个修复程序。 同时,这里有一个链接到SDL_platform.h的固定副本:

https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h

如果您将该文件放入SDL 2.0.3的include \ SDL2 \目录中,覆盖原始文件,则您的应用程序应该编译成功。

快速修复。 在SDL_platform.h中注释掉第121到132行。当错误发生时,文件加载到C :: B中。 保存并build立起来!

我有这个问题。 去

 C:\Program Files (x86)\Windows Kits\8.0\Include\shared 

并findwinapifamily.h ,然后将其复制到您的

 ..\Mingw\Include\ folder 

编辑:我想我有Windows套件文件,因为Visual Studio 2012或更高版本,对不起。 我很高兴你能解决你的问题。

Yeap,问题出现在头文件中(SDL_plataform.h版本SDL 2.0.3中的117到134行):

 #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) /* Try to find out if we're compiling for WinRT or non-WinRT */ /* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */ #if defined(__MINGW32__) || (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ #include <winapifamily.h> #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #undef __WINDOWS__ #define __WINDOWS__ 1 /* See if we're compiling for WinRT: */ #elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #undef __WINRT__ #define __WINRT__ 1 #endif #else #undef __WINDOWS__ #define __WINDOWS__ 1 #endif /* _MSC_VER < 1700 */ #endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */