簡體   English   中英

這是什么 a.out,是什么讓它消失了?

[英]What is this a.out and what makes it disappear?

我是 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

a.outgcc生成的默認可執行文件名稱。 一旦您調用gcc a.out (您真的不應該這樣做 - 因為它正在將a.out作為輸入傳遞給gcc ),它會嘗試創建一個新的a.out ,但由於它試圖讀取現有的內容而失敗a.out作為文件,它不是。 這就是讓它“消失”的原因。

如果您希望gcc生成具有特定名稱的可執行文件,請使用-o開關后跟所需的名稱:

gcc hello.c -o hello

將生成名為hello的可執行文件,可以使用

./hello

除了以前的答案,我建議你使用

gcc -o hello hello.c

這將創建一個名為“hello”的可執行文件,而不是默認的“a.out”。 當然,您可以隨心所欲地稱呼它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM