在编译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__) */
- HttpClient.GetAsync与networking凭据
- 如何禁用用户的表单大小调整?
- 为什么C ++标准库中没有transform_if?
- 使用不同的线程更新GUI(WPF)
- 在那里有任何像样的C#分析器?
- 在使用Windows服务和SQL Server的OneWay WCF消息中排队
- 为什么2048×2048与2047x2047arrays乘法相比,会有巨大的性能下降?
- 在FormsAuthentication.SignOut()之后,Page.User.Identity.IsAuthenticated仍然为true。
- 我可以使用if(pointer)而不是if(pointer!= NULL)吗?