gl3w und stdint.h: int32_t "Neudefinition" Fehler



  • EDIT: Könnte ein Admin meinen Thread ins richtige Forum schieben? Hat nix mit CLI/.NET zu tuen. Danke! 🙂

    Ich benutze vs2008. Für ein Projekt, welches ich nun unter Windows compilieren möchte, bringe ich eine stdint.h mit. Nun erhalte ich folgenden Fehler:

    .../stdint.h(410) : error C2371: 'int32_t': Neudefinition; unterschiedliche Basistypen
    .../gl3.h(2008): Siehe Deklaration von 'int32_t'

    Und ich verstehe nicht wieso, denn im stdint.h Header wird ein #ifndef int32_t benutzt um Doppeldefinitionen zu vermeiden.

    irgendEineDatei.cpp:

    #include <GL3/gl3.h>
    #include <stdint.h>
    

    gl3.h Ausschnitt:

    #ifndef GLEXT_64_TYPES_DEFINED
    /* This code block is duplicated in glxext.h, so must be protected */
    #define GLEXT_64_TYPES_DEFINED
    /* Define int32_t, int64_t, and uint64_t types for UST/MSC */
    /* (as used in the GL_EXT_timer_query extension). */
    #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #include <inttypes.h>
    #elif defined(__sun__) || defined(__digital__)
    #include <inttypes.h>
    #if defined(__STDC__)
    #if defined(__arch64__) || defined(_LP64)
    typedef long int int64_t;
    typedef unsigned long int uint64_t;
    #else
    typedef long long int int64_t;
    typedef unsigned long long int uint64_t;
    #endif /* __arch64__ */
    #endif /* __STDC__ */
    #elif defined( __VMS ) || defined(__sgi)
    #include <inttypes.h>
    #elif defined(__SCO__) || defined(__USLC__)
    #include <stdint.h>
    #elif defined(__UNIXOS2__) || defined(__SOL64__)
    typedef long int int32_t;
    typedef long long int int64_t;
    typedef unsigned long long int uint64_t;
    #elif defined(_WIN32) && defined(__GNUC__)
    #include <stdint.h>
    #elif defined(_WIN32)
    typedef __int32 int32_t; // <---------- ---------- ---------- ZEILE 2008
    typedef __int64 int64_t;
    typedef unsigned __int64 uint64_t;
    #else
    /* Fallback if nothing above works */
    #include <inttypes.h>
    #endif
    #endif
    

    stdint.h Ausschnitt:

    #ifndef INT32_MAX
    # define INT32_MAX (0x7fffffffL)
    #endif
    #ifndef INT32_MIN
    # define INT32_MIN INT32_C(0x80000000)
    #endif
    #ifndef int32_t
    #if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
      typedef signed long int32_t; // <---------- ---------- ---------- ZEILE 410
    # define INT32_C(v) v ## L
    # ifndef PRINTF_INT32_MODIFIER
    #  define PRINTF_INT32_MODIFIER "l"
    # endif
    #elif (INT_MAX == INT32_MAX)
      typedef signed int int32_t;
    # define INT32_C(v) v
    # ifndef PRINTF_INT32_MODIFIER
    #  define PRINTF_INT32_MODIFIER ""
    # endif
    #elif (SHRT_MAX == INT32_MAX)
      typedef signed short int32_t;
    # define INT32_C(v) ((short) (v))
    # ifndef PRINTF_INT32_MODIFIER
    #  define PRINTF_INT32_MODIFIER ""
    # endif
    #else
    #error "Platform not supported"
    #endif
    #endif
    

    Könnte mir das jemand erklären? Oder beim Raten helfen?



  • Osbios schrieb:

    Und ich verstehe nicht wieso, denn im stdint.h Header wird ein #ifndef int32_t benutzt um Doppeldefinitionen zu vermeiden.

    Ja, aber gl3.h hat kein #define int32_t.

    Man könnte vermutlich einfach den ganzen Teil der gl3.h durch ein einfaches #include <stdint.h> oder #include <inttypes.h> ersetzen. Aber eventuell muss man dann die dazugehörige Library neu kompilieren...

    PS: Was hat das alles im .NET-Forum zu suchen?


Anmelden zum Antworten