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?