Windows上的gcc:生成的“a.exe”文件消失

时间:2014-07-09 18:36:20

标签: c windows gcc

我正在使用GCC版本4.7.1,但我也在GCC 4.8上尝试过这个。这是我正在尝试编译的代码:

#include <stdio.h>

void print(int amount) {
    int i;
    for (i = 0; i < 5; i++) {
        printf("%d", i);
    }
}

int main(int argc, char** argv) {
    print(5);
    return 0;
}

它看起来应该可以工作,当我用...编译时

gcc main.c

编译需要一段时间,生成a.exe文件,a.exe文件消失。我的代码没有给我任何错误。

这是一个证据的GIF,因为有些人误解了这个: proof

8 个答案:

答案 0 :(得分:7)

(由于ahoffer的deleted answer不太正确,我会根据评论中的信息发布此内容。)

在Windows上,gcc默认生成名为a.exe的可执行文件。 (在类UNIX系统上,出于历史原因,默认名称为a.out。)通常,您使用-o选项指定名称。

显然,生成的a.exe文件会在您的防病毒软件中生成误报,因此该文件会在创建后立即自动删除。我看到你已经contacted Avast的开发人员对这种误报了。

请注意,防病毒程序通常会检查文件的内容,而不是其名称,因此生成名称不是a.exe的文件将无济于事。但是,对程序进行一些更改可能会更改可执行文件的内容,以避免出现问题。

您可以尝试编译一个简单的“hello,world”程序,看看是否会发生同样的事情。

感谢Chrono Kitsune在评论中链接到this relevant Mingw-users discussion

这与您的问题无关,但您应该在程序输出结束时打印换行符('\n')。它在Windows环境中可能并不重要,但一般来说程序的标准输出应该(几乎)总是在最后一行的末尾有一个换行符。

答案 1 :(得分:3)

尝试使用gcc编译,但不使用以下所有标准库:

gcc  -nostdlib -c  test.c -o test.o; gcc test.o -lgcc -o test.exe

一个mingw库二进制文件必须生成一个误报,知道哪个库将是有用的。

答案 2 :(得分:2)

您的代码没有问题,只是正确退出。

您必须在命令行中运行它,它将显示所有信息。

start-&gt; run-&gt; cmd,然后cd到您的目录。然后是a.exe。如果您不想这样做,可以在main中返回之前添加sleep()。

此外,在您的代码中,当您将print(5)传递给您的函数时,它还没有被使用。

答案 3 :(得分:0)

我确认是由于防病毒引起的。
我做了这个测试:
在t = 0时编译helloworld.c;
1秒钟之内告诉McAfee不要将helloworld.exe视为威胁。 >>文件仍然存在
如果我太慢,该文件将被删除。

Antivirus next to compilation instructions

答案 4 :(得分:-1)

你试试:

gcc -o YOUR_PROGRAM.exe main.c

答案 5 :(得分:-1)

如果假设您在运行文件时在a.exe附近收到错误消息, 然后执行以下步骤: 1.开放式病毒与威胁防护 2.在病毒和威胁防护设置中选择管理设置 3.有实时保护和云交付保护先开启然后关闭,实时保护和云交付保护。

https://i.stack.imgur.com/mcIio.jpg

答案 6 :(得分:-2)

a.exe也是病毒的名称。我怀疑您的计算机的安全软件正在删除或隔离该文件,因为它认为它是病毒。使用redFIVE的建议将输出文件重命名为&#34; print.exe&#34;这样病毒扫描程序就不会删除它。

答案 7 :(得分:-2)

您可以通过在防病毒软件的“扫描排除路径”部分中指定完整文件路径(例如:c:\ MyProject)来阻止您的防病毒软件删除您的.exe。