web-dev-qa-db-fra.com

"winapifamily.h: Aucun fichier ou répertoire de ce type" lors de la compilation de SDL dans Code :: Blocks

Je suis les tutoriels SDL2.0 de LazyFoo, en utilisant Code :: Blocks 13.12. Je n’ai eu aucun mal à faire en sorte que SDL2 soit lié et fonctionne dans VS2010, mais j’ai changé IDE et tombe sur cette erreur:

winapifamily.h: Aucun fichier ou répertoire de ce type

Je pense que tout est lié correctement. J'ai indiqué le programme à mes répertoires SDL2 include et lib.

Buildlog: (une erreur survient dans le fichier: ..\include\SDL2\SDL_platform.h)

=== Construire: Déboguer dans SDL2_Setup (compilateur: GNU Compilateur GCC) ===

erreur fatale: winapifamily.h: aucun fichier ou répertoire de ce type

=== Échec de la construction: 1 erreur (s), 0 avertissement (s) (0 minute (s), 0 seconde (s)) ===

C'est la première fois que je pose une question ici. J'ai consulté Google pour obtenir une réponse et faire une recherche parmi les questions/réponses existantes, mais je n'ai pas pu résoudre le problème. Voici mon code aussi.

Mon code:

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

[~ # ~] mise à jour [~ # ~] : SDL 2.0.4 est maintenant disponible, inclut un correctif pour ce bogue et est disponible au téléchargement. à http://libsdl.org/download-2.0.php


C'est un bogue dans SDL 2.0.3. Un correctif a été validé pour la prochaine version de SDL. En attendant, voici un lien vers la copie fixe de SDL_platform.h:

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

Si vous déposez le fichier dans le répertoire include\SDL2\de SDL 2.0.3 en écrasant l'original, vos applications devraient être compilées correctement.

63
David Ludwig

La solution rapide. Mettez les lignes de commentaire 121 à 132 inclusivement dans SDL_platform.h. Le fichier est chargé dans C :: B lorsque l'erreur se produit. Enregistrez-le et construisez-le!

10
Neil Regan

J'ai eu ce problème. Aller à

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

et trouve winapifamily.h, puis copiez-le dans votre

..\Mingw\Include\ folder

Edit: Je pense avoir des fichiers de kits Windows à cause de Visual Studio 2012 ou version ultérieure, désolé. Je suis heureux que vous ayez pu résoudre votre problème.

Oui, le problème est dans cet en-tête (lignes 117 à 134 dans SDL_plataform.h version 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__) */
1
Gino Scarpino