2011-08-24 22 views
7

Sto provando a compilare un programma c sotto mingw gcc. Questo programma utilizza un numero intero __uint128_t. Quando provo a compilarlo sotto la normale ubuntu gcc sulla stessa macchina a 64 bit, funziona perfettamente. Ma poi, quando provo a compilarlo per Windows sotto mingw, semplicemente non riconosce nemmeno la parola chiave __uint128_t. Cosa significa questo? Non ci sono 128 bit interi sotto mingw? In caso contrario, esiste un linguaggio di programmazione per Windows che ha numeri interi nativi (e FAST) di 128 bit?__uint128_t on mingw gcc

+0

Eseguire 'gcc -dM -E - jww

risposta

5

È necessario

  • una versione relativamente recente di gcc
  • una versione compilata con il supporto nativo a 64 bit integer

__int128_t viene poi emulato utilizzando coppie di int64_t nello stesso modo in cui Gli interi a 64 bit vengono emulati con 32 bit se non sono disponibili su compila 32 bit

5

Sono stato in grado di ottenere lo stesso problema con Code :: Blocks e l'installazione mingw predefinita (che è IA32 btw), tuttavia, quando ho installato TDM-MinGW64, ha compilato bene (dopo aver aggiunto il compilatore x64 a C :: B). Quindi assicurati che la tua build mingw abbia come target x64 (con -m64) e è una versione x64 di mingw, poiché __uint128_t è un'estensione ABI x64 opzionale.

qualsiasi IDE di Windows che si sta utilizzando non raccoglierà __int128_t come una parola chiave, poiché è un'estensione GCC speciale (come menzionato).

0

Ma poi, quando provo a compilarlo per Windows sotto mingw, semplicemente non riconosce nemmeno la parola chiave __uint128_t. Cosa significa questo? Non ci sono 128 bit interi sotto mingw?

Eseguire gcc -dM -E - < /dev/null | grep INT128. Se emette la macro #define __SIZEOF_INT128__ 16, allora è disponibile __uint128_t. Se non emette la macro o è inferiore a 16, quindi __uint128_t non è disponibile.

Vedere anche 128-bit integer - nonsensical documentation? sulla mailing list degli utenti GCC.

Problemi correlati