"winapifamily.h: Нет такого файла или каталога" при компиляции SDL в Code:: Blocks

Я следую вместе с учебниками SDL2.0 от LazyFoo, используя Code:: Blocks 13.12. У меня не возникло проблем с подключением и запуском SDL2 в VS2010, но с измененной IDE и встречей этой ошибки:

winapifamily.h: Нет такого файла или каталога

Я думаю, что все правильно связано. Я указал программу на мои каталоги SDL2 include и lib.

Buildlog: (ошибка возникает в файле:..\include\SDL2\SDL_platform.h)

=== Build: Debug в SDL2_Setup (компилятор: компилятор GNU GCC) ===

фатальная ошибка: winapifamily.h: нет такого файла или каталога

=== Сбой сборки: 1 ошибка, 0 предупреждений (0 минут, 0 секунд) ===

Это мой первый вопрос, задающий вопрос здесь. Я сделал Google для ответа и поискал существующие вопросы/ответы здесь, но не смог решить проблему. Вот мой код.

Мой код:

// 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;
}

Ответ 1

UPDATE: SDL 2.0.4 теперь отсутствует, включает исправление для этой ошибки и доступно для загрузки по адресу 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, включите каталог \SDL2 \, перезаписывая оригинал, ваши приложения должны скомпилировать ok.

Ответ 2

Быстрое исправление. Комментировать строки с 121 по 132 включительно в SDL_platform.h При возникновении ошибки файл загружается в C:: B. Сохраните его и уберите!

Ответ 3

У меня была эта проблема. Перейдите в

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

и найдите winapifamily.h, затем скопируйте его на

..\Mingw\Include\ folder

Изменить: Я думаю, что у меня есть файлы с наборами окон из-за визуальной студии 2012 или позже, извините. Я рад, что вы смогли решить свою проблему.

Yeap, проблема в этом заголовке (строки с 117 по 134 в версии SDL_plataform.h SDL 2.0.3):

#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__) */