为什么 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
或 __int64
或 int64_t
。如果您只想检查您的可执行文件是针对 32 位编译还是针对 64 位编译,请改用 sizeof(void*)
。
我使用的是标记为 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
或 __int64
或 int64_t
。如果您只想检查您的可执行文件是针对 32 位编译还是针对 64 位编译,请改用 sizeof(void*)
。