2011-08-24 11 views
7

Estoy tratando de compilar un programa c en mingw gcc. Este programa usa un entero __uint128_t. Cuando intento compilarlo bajo el estándar ubuntu gcc en la misma máquina de 64 bits, funciona perfectamente. Pero luego, cuando intento compilarlo para Windows bajo mingw, simplemente ni siquiera reconoce la palabra clave __uint128_t. ¿Qué significa esto? No hay enteros de 128 bits en mingw? Si no, ¿hay algún lenguaje de programación para Windows que tenga enteros nativos (y FAST) de 128 bits?__uint128_t en mingw gcc

+0

Realice 'gcc -dM -E - jww

Respuesta

5

Necesitas

  • una versión relativamente reciente de gcc
  • una versión compilada con soporte nativo de 64 bits número entero

__int128_t entonces se emula mediante el uso de pares de int64_t de la misma manera como números enteros de 64 bits se emulan con 32 bits si no están disponibles en 32 bits compila

5

que era capaz de conseguir el mismo problema al usar Code :: Blocks y la instalación predeterminada de mingw (que es IA32 btw), sin embargo, cuando instalé TDM-MinGW64, se compiló bien (después de agregar el compilador x64 a C :: B). Así que asegúrese de que su construcción mingw esté dirigida a x64 (con -m64) y es una versión x64 de mingw, ya que __uint128_t es una extensión x64 ABI opcional.

Cualquiera que sea el IDE de Windows que esté utilizando no seleccionará __int128_t como una palabra clave, ya que es una extensión especial de GCC (como se mencionó).

0

Pero luego, cuando intento compilarlo para windows bajo mingw, simplemente ni siquiera reconoce la palabra clave __uint128_t. ¿Qué significa esto? No hay enteros de 128 bits en mingw?

Realizar gcc -dM -E - < /dev/null | grep INT128. Si muestra la macro #define __SIZEOF_INT128__ 16, entonces __uint128_t está disponible. Si no da salida a la macro o es menor que 16, entonces __uint128_t no está disponible.

Véase también 128-bit integer - nonsensical documentation? en los usuarios del CCG lista de correo.

Cuestiones relacionadas