我刚刚从 Windows 切换到 Ubuntu 11.10。
我使用文本编辑器用 C 语言编写了以下代码,并将其保存为 Documents 中的 HelloWorld.c。
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
我启动了终端并输入以下命令:
cd Documents
gcc HelloWorld.c
一个名为 a.out 的文件,经过 Google 搜索后,发现它是可执行文件。我输入了以下命令:
a.out
但我明白
a.out: command not found
我到底哪一步做错了?
答案1
由于您正在当前工作目录中运行可执行文件,因此应该在其前面加上./
。因此对于您的程序,请将其作为 运行./a.out
。
解释
终端在 中搜索可执行文件$PATH
。这是一个 Unix环境变量列出包含系统二进制文件的目录(例如ls
、echo
或gcc
)。如果你调用一个可执行文件,不是在$PATH
目录中(例如a.out
),需要指明其在文件系统中的绝对路径。
在终端中.
是当前工作目录的同义词,因此./a.out
。您也可以同样调用/home/yihang/Documents/a.out
。
答案2
当您在 Linux 上运行命令时,它会搜索环境变量中列出的所有目录PATH
,如果在那里找不到该命令,那么您就会收到所看到的消息。
通常它看起来像这样:
PATH=/usr/local/bin:/usr/bin:/bin
这意味着它将首先在 中查找/usr/local/bin
。如果它在那里找不到它,它将在 中查找/usr/bin
,依此类推。
事实上,这在 DOS/Windows 上非常相似:有一个名为的变量%PATH%
可以做完全相同的事情。
这不同之处问题是,在 Windows 上,当前目录也会被搜索。Unix 认为这很糟糕,因为本地文件(例如恶意软件)可能会意外覆盖重要的系统程序。
但是,如果您愿意,您可以通过.
在路径中添加以下内容使 Linux 以相同的方式工作:
PATH=.:$PATH
(这表示设置PATH
为.:
加上 的现有内容$PATH
。)
最终看起来像这样(在您的机器上可能会有所不同):
PATH=.:/usr/local/bin:/usr/bin:/bin
如果您不想这样做,您可以通过明确指定目录来运行每个程序:
./myprog
或者
/home/username/myprog
答案3
本质上,由于您没有指定可执行文件的名称,因此默认创建了 a.out。请尝试以下操作:
gcc HelloWorld.c -o HelloWorld
完成此操作后,您应该能够通过在“HelloWorld”前面加上点斜杠 (./) 来调用它(如 Sunil 所建议的那样):
./HelloWorld
以下是一篇文章的链接,其中稍微解释了一下创建 a.out 的原因:在 Linux 上编写和编译 C 程序。