为什么 MinGW-w64 生成 32 位二进制文​​件?

Why does MinGW-w64 generate 32-bit binaries?

我使用的是标记为 x86_64-8.1.0-posix-seh-rt_v6-rev0 的 MinGW-w64 版本。当运行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 编译器标志,但它没有任何改变。

我哪里做错了,如何解决?

long 不能保证在 64 位可执行文件中的大小为 64 位。事实上,on Windows, long is always 32 bits under both x86 and x64。如果需要 64 位整数,请使用 long long__int64int64_t。如果您只想检查您的可执行文件是针对 32 位编译还是针对 64 位编译,请改用 sizeof(void*)