【问题标题】:Why I get an "a.exe" instead of "a.out" on window C programming [duplicate]为什么我在窗口 C 编程中得到“a.exe”而不是“a.out”[重复]
【发布时间】:2018-05-02 19:33:17
【问题描述】:

当我通过 cc hello_world.c 在“hello_world.c”下面编译时,
它会生成一个 'a.exe' 而不是 'a.out'

#include <stdio.h>

main()
{
    printf("hello, world\n");
}
  1. “a.out”和“a.exe”有什么区别?
  2. 为什么我得到的是“a.exe”而不是“a.out”?

【问题讨论】:

  • 这取决于您的编译器及其设置。说明编译器及其设置
  • 因为可执行文件在 Windows 上有 .exe 扩展名,而在其他平台上没有。
  • 很抱歉,我如何检查编译器的版本?我在 Windows 10 上安装了 Visual Studio 2015,并将代码编译为“cc hello_world.c”

标签: c compilation


【解决方案1】:

a.outc 程序 编译后创建的临时文件实际上是类Unix 操作系统的Object Code。目标代码用于编写系统调用,实现代码功能和链接器重定位信息,以帮助它在内存中找到目标代码(更多信息here)。

编译器编译代码并写入一个称为目标代码的文件,在 linux/unix 中该文件称为a.out。 该文件可以进一步linked 到操作系统中存在的定义(或更技术上是libraries),以形成可执行映像

例如在 Windows 中:

【讨论】:

  • 对我的回答投反对票的人可能想解释原因。
【解决方案2】:

这取决于您的平台。例如,gcc 将在 linux 上生成 .out,在 Windows 上生成 .exe,如果你不给它任何额外的参数的话。 (即运行cc / gcc "source")。

您可以强制gcc 在带有gcc "source" -o "dest.out" 的Windows 上生成.out

如果您的编译器默认输出一个扩展名(在您的情况下,.exe 似乎是默认值,这对于 Windows 来说是完全可以的),我会坚持下去。不用担心买不到其他类型。

【讨论】:

  • 用户正在写“我在 Windows 10 上安装了 Visual Studio 2015,并将代码编译为“cc hello_world.c””,所以它是 Windows....
  • 我修改了问题。谢谢。
【解决方案3】:

Windows 中的二进制执行文件具有扩展名exe。我不确定com-files 是否支持,但这不是我们的情况。扩展out 通常用于在某些程序运行时编写文本协议。我猜是你的程序本身在启动时会创建out-file。如需更多帮助,请至少提供用于编译 C 程序的程序环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多