64 位版本的 GCC 无法编译 64 位 exe

64-bit version of GCC not compiling 64-bit exe

我是 gcc 命令行 编译的初学者。 我需要有关 -m64 标志的帮助。

我使用 MinGW 安装了 gcc 编译器。 我通过以下检查了 gcc 版本, gcc -v 命令,显示 Target: x86_64-w64-mingw32。 所以我假设安装了 64 位版本的 gcc。

Objective:我写了一个小程序来检查 main.exe 是为 32 位还是 64 位生成的。

#include<stdio.h>

int main(void)
{
    printf("The Size is: %lu\n", sizeof(long));
    
    return 0;   
}

我使用以下命令编译,gcc -o main main.c。当我执行 main.exe 时,它输出 The Size is: 4.

但我预计输出为“The Size is: 8”。

所以我将命令修改为gcc -m64 -o main main.c。当我再次执行 main.exe 时,它仍然输出 `The Size is: 4'

如何编译64位版本的exe?

正如其他人在评论中所说,long 的大小在 64 位系统上可以是 8 或 4 个字节。您可以尝试 sizeof(size_t)sizeof(void*)。即使这在每个系统上都可能不可靠(但应该适用于 Windows、Linux、macOS)。

x86_64-w64-mingw32: mingw32 是将生成 32 位可执行文件的编译器。 包名称中对 64 位的引用表明此编译器以 64 位模式运行。

如果您不想生成 64 位可执行文件,您将需要 mingw64 编译器: https://www.mingw-w64.org/

这是一个更好的方法。

首先从 Microsoft https://docs.microsoft.com/en-us/sysinternals/downloads/sigcheck 下载 Sigcheck 然后 运行 如下所示:

C:\Sigcheck>sigcheck64.exe -u -e "C:\Sublime C++ Projects\runtime_measure.exe"

Sigcheck v2.82 - File version and signature viewer
Copyright (C) 2004-2021 Mark Russinovich
Sysinternals - www.sysinternals.com

c:\sublime c++ projects\runtime_measure.exe:
        Verified:       Unsigned
        Link date:      7:43 PM 12/8/2021
        Publisher:      n/a
        Company:        n/a
        Description:    n/a
        Product:        n/a
        Prod version:   n/a
        File version:   n/a
        MachineType:    64-bit

如您所见,在本例中,runtime_measure.exe 是一个 64 位二进制文​​件。

不要忘记提供正确的地址,以便终端可以从您放置的目录中找到并执行sigcheck64.exe

此外,请注意在命令中使用了两个参数 -u-e