__uint128_t на mingw gcc
Я пытаюсь скомпилировать AC-программу под MINGW GCC. Эта программа использует __uint128_t
целое число. Когда я пытаюсь скомпилировать его под стандартным Ubuntu GCC на той же 64-битной машине, это прекрасно работает. Но потом, когда я пытаюсь скомпилировать его для Windows под Mingw, он просто не распознает __uint128_t
ключевое слово. Что это значит? Под mingw нет 128-битных чисел? Если нет, есть ли какой-нибудь язык программирования для окон, который имеет собственные (и FAST) 128-битные целые числа?
3 ответа
Тебе нужно
- относительно недавняя версия gcc
- версия, скомпилированная с поддержкой 64-битного целого числа
__int128_t
затем эмулируется с помощью пар int64_t
так же, как 64-битные целые числа эмулируются с 32-битными, если они не доступны на 32-битных компиляциях
Мне удалось получить ту же проблему, используя Code::Blocks и установку по умолчанию mingw (которая, кстати, IA32), однако, когда я установил TDM-MinGW64, он скомпилировался нормально (после добавления компилятора x64 в C::B). Поэтому убедитесь, что ваша сборка mingw ориентирована на x64 (с -m64
) и это x64 сборка mingw, как __uint128_t
является необязательным расширением x64 ABI.
какую бы оконную IDE вы не использовали __int128_t
как ключевое слово, хотя, как его специальное расширение GCC (как уже упоминалось).
Но потом, когда я пытаюсь скомпилировать его для windows под mingw, он просто даже не распознает ключевое слово __uint128_t. Что это значит? Под mingw нет 128-битных чисел?
выполнять gcc -dM -E - < /dev/null | grep INT128
, Если вывести макрос #define __SIZEOF_INT128__ 16
, затем __uint128_t
доступен. Если он не выводит макрос или его меньше 16, то __uint128_t
не доступен.
Также смотрите 128-битное целое число - бессмысленная документация? в списке рассылки пользователей GCC.