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

Sem*_*nic 4 c++ g++ 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
Run Code Online (Sandbox Code Playgroud)

根据我的理解,这个版本的 g++ 应该默认生成 64 位二进制文​​件。

编译命令是这样的:

g++.exe -std=c++17 -g main.cpp -o main.exe
Run Code Online (Sandbox Code Playgroud)

但是,如果main.cpp看起来像这样:

#include <iostream>
int main() {
    std::cout << sizeof(long);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它打印4而不是8. 我尝试使用-m64编译器标志,但没有任何改变。

我做错了什么,如何解决这个问题?

Rem*_*eau 7

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