C++ 为什么MinGW-w64生成32位二进制文件?
我使用的是标记为C++ 为什么MinGW-w64生成32位二进制文件?,c++,g++,mingw-w64,C++,G++,Mingw W64,我使用的是标记为x86\u 64-8.1.0-posix-seh-rt\u 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 #include <ios
x86\u 64-8.1.0-posix-seh-rt\u 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
#include <iostream>
int main() {
std::cout << sizeof(long);
return 0;
}
但是,如果main.cpp
如下所示:
g++.exe -std=c++17 -g main.cpp -o main.exe
#include <iostream>
int main() {
std::cout << sizeof(long);
return 0;
}
#包括
int main(){
std::coutlong
不能保证64位可执行文件的大小。事实上,如果需要64位整数,请使用long-long
或int64
或int64\t
。如果您只想检查可执行文件是否编译为32位与64位,请使用sizeof(void*)
。sizeof(长)
没有定义二进制是32位还是64位M-请参阅,对于LLP64事实上的标准,这是否回答了您的问题?@AlanBirtles,我认为@Slava posted链接更相关,因为我们讨论的是不同平台上的不同事实上的标准。我上面发布的相同代码在Linux上构建时返回8
这是对Windows上观察到的行为的错误解释。雷米的答案同时也是确定二进制文件是否为64位的最佳选择。呃,这就是斯拉瓦链接到的帖子?@AlanBirtles,嗯,是的,确实如此。虽然不是最重要的答案。不过,我还是站出来更正。