Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么MinGW-w64生成32位二进制文件?_C++_G++_Mingw W64 - Fatal编程技术网

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::cout
long
不能保证64位可执行文件的大小。事实上,如果需要64位整数,请使用
long-long
int64
int64\t
。如果您只想检查可执行文件是否编译为32位与64位,请使用
sizeof(void*)

sizeof(长)
没有定义二进制是32位还是64位M-请参阅,对于LLP64事实上的标准,这是否回答了您的问题?@AlanBirtles,我认为@Slava posted链接更相关,因为我们讨论的是不同平台上的不同事实上的标准。我上面发布的相同代码在Linux上构建时返回
8
这是对Windows上观察到的行为的错误解释。雷米的答案同时也是确定二进制文件是否为64位的最佳选择。呃,这就是斯拉瓦链接到的帖子?@AlanBirtles,嗯,是的,确实如此。虽然不是最重要的答案。不过,我还是站出来更正。