我是C编程新手。当我尝试编译它时,我得到了一个.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
答案 0 :(得分:4)
a.out
是gcc
生成的默认可执行文件名。一旦你调用gcc a.out
(你真的不应该),它就会尝试创建一个 new a.out
,但是因为它试图读取现有的{{1}而失败了作为源文件,它不是。这就是让它“消失”的原因。
如果您希望a.out
生成具有特定名称的可执行文件,请使用后跟所需名称的gcc
开关:
-o
将生成名为gcc hello.c -o hello
的可执行文件,可以使用
hello
答案 1 :(得分:1)
除了之前的回答,我建议您使用
gcc -o hello hello.c
这将创建一个名为“hello”的可执行文件,而不是默认的“a.out”。当然你可以随意调用它。
答案 2 :(得分:0)
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