我正在使用标记为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 long
或__int64
。如果仅想检查可执行文件是针对32位还是64位编译的,请改用int64_t
。