gcc 这个“a.out”文件是什么,是什么让它消失的?

z4bn682m  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(794)

我是一个C编程新手。当我试图编译它的时候,我得到了一个 a.out 文件(我不知道它是从哪里来的),它不知怎么就消失了。这是怎么回事?
下面是我运行的命令:

$ gcc hello.c
$ ls
a.out hello hello.c

$ a.out
a.out: command not found

$ gcc a.out
a.out: file not recognized: File truncated
collect2: error: ld returned 1 exit status

$ ./hello
Hello, world!$ ./a.out
bash: a.out: No such file or directory

$ ls
hello hello.c
1yjd4xko

1yjd4xko1#

a.out是由gcc生成的默认可执行文件名。(您真的不应该这样做-因为它将a.out作为 input 传递给gcc),它尝试创建一个 newa.out,但是失败了,因为它尝试将现有的a.out作为 source 文件读取,事实并非如此,这就是它“消失”的原因。
如果希望gcc生成具有特定名称的可执行文件,请使用-o开关,后跟所需的名称:

gcc hello.c -o hello

将生成名为hello的可执行文件,该文件可以使用

./hello
kt06eoxx

kt06eoxx2#

a.out是默认的可执行文件,因为你没有告诉GCC该如何命名它(通过使用-o)。仅仅输入a.out不会运行它,因为它在当前目录中,Linux不会像其他坏掉的操作系统那样将当前目录放在路径中,所以你必须输入./a.out来运行它。
您后来键入了gcc a.out,这就删除了它,并告诉gcc尝试编译可执行文件,就好像它是一个C程序一样,这是没有意义的,所以它产生的a.out是空的。
你想做的是:

gcc hello.c
./a.out

或者更好:

gcc -o hello hello.c
./hello
af7jpaap

af7jpaap3#

除了前面的答案之外,我建议您使用

gcc -o hello hello.c

这将创建一个名为“hello”的可执行文件,而不是默认的“a.out”。当然,你可以随意命名它。

相关问题