Почему MinGW-w64 генерирует 32-битные двоичные файлы? - PullRequest
3 голосов
/ 05 февраля 2020

Я использую версию MinGW-w64, помеченную как x86_64-8.1.0-posix-seh-rt_v6-rev0. При запуске g++ --version я вижу следующее:

g++.exe (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0

Насколько я понимаю, эта версия g ++ должна генерировать 64-разрядные двоичные файлы по умолчанию.

Команда компилятора выглядит следующим образом:

g++.exe -std=c++17 -g main.cpp -o main.exe

Однако, если main.cpp выглядит так:

#include <iostream>
int main() {
    std::cout << sizeof(long);
    return 0;
}

Он печатает 4 вместо 8. Я пытался использовать флаг компилятора -m64, но он ничего не изменил.

Что я делаю не так и как это исправить?

1 Ответ

6 голосов
/ 05 февраля 2020

long не гарантированно имеет размер 64 бита в 64-битном исполняемом файле. Фактически, на Windows, long всегда 32 бит при x86 и x64 . Используйте long long или __int64 или int64_t, если вам нужно 64-битное целое число. Если вы просто хотите проверить, скомпилирован ли ваш исполняемый файл для 32-битной или 64-битной версии, используйте sizeof(void*).

...