48 votes

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

Je suis avec la SDL2.0 tutoriels par LazyFoo, l'utilisation de Code::Blocks 13.12. Je n'ai eu aucun mal à obtenir SDL2 liés et en cours d'exécution dans VS2010, mais ont changé IDE et venir à travers ce message d'erreur:

winapifamily.h: Aucun fichier ou répertoire

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

Buildlog: (erreur se produit dans le fichier: ..\include\SDL2\SDL_platform.h)

=== Build: Debug dans SDL2_Setup (compiler: GNU GCC Compiler) ===

erreur fatale: winapifamily.h: Aucun fichier ou répertoire

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

C'est ma première fois de poser une question sur ici. Je n'ai Google pour une réponse et de recherche existantes questions/réponses ici, mais a été incapable de 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;
}

63voto

David Ludwig Points 396

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.

10voto

Neil Regan Points 41

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

1voto

Gino Scarpino Points 1

J'ai eu ce problème. Aller à

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

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

 ..\Mingw\Include\ folder
 

Edit: je pense que j’ai 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__) */
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X