执行已编译的C程序

时间:2013-06-28 23:22:41

标签: c compilation executable

我编写了一个名为main.c的愚蠢的“hello world”C程序:

gcc main.c

正如所料,出现了一个名为a.out的文件,他们说这是一个可执行文件。如果我输入

,则从同一目录中
a.out

然后点击Enter,它说“找不到命令”。但如果我输入

./a.out

根据需要说“你好世界”。我从来没有见过一个可执行文件,它需要在它前面运行'./'。为什么现在?

5 个答案:

答案 0 :(得分:2)

PATH以外的所有可执行文件都需要从根/或本地目录./运行显式路径。快速搜索会在其他线程中出现基本相同的问题:

Why do you need ./ (dot-slash) before script name to run it in bash?

这也有助于在shell中自动完成(假设它支持它)。如果只键入 a 选项卡 选项卡,它将列出路径中的每个可执行文件,以“a”开头。但是,如果您键入 / a Tab ,它可能会自动完成为a.out因为它只会查看当前目录中以“a”开头的可执行文件。因此,以这种方式查看,“。/”实际上保存您键入了几个键!

答案 1 :(得分:0)

那是因为a.out不在$PATH 您提供的命令由shell在$PATHenvironment variable in linux)中搜索。

$ PATH基本上是目录列表。当您提供可执行文件名时,shell会在$PATH提供的目录中搜索它。

由于a.out不在$PATH中,您必须明确提供a.out的路径。

答案 2 :(得分:0)

Unix和Linux的标准做法是不要在路径中包含当前的工作目录。如果您想要MSDOS / Windows行为,请更改PATH变量以包含.作为第一个目录。

答案 3 :(得分:0)

这是因为系统正在寻找a.out或任何其他exec。文件在一些特殊的路径。默认情况下,当前dir不在该列表中(通常)。

查看此类路径的列表:

$ env|grep PATH

你可以将这样的当前目录添加到PATH环境中。变量:

$ export PATH=$PATH:.

但你最好避免这样做并运行 ./ a.out 。 这样的技术。让我们了解我们正在运行当前目录中的指定文件, 不是另一个(可能)目录中具有相同名称的其他文件。所以,我们知道我们到底跑了什么。

答案 4 :(得分:0)

当您在Linux终端中键入类似a.out的内容时,您暗示您要运行名为a.out的命令。默认情况下,终端不会在当前目录中查找这些命令,它会查找PATH - 可执行程序的一组目录。通常是这些目录:

  • /bin
  • /usr/bin
  • /usr/local/bin
  • 其中(您可以通过运行echo $PATH
  • 查看所有内容

如果程序不在directory的某个目录中,则必须指定程序的PATH目录才能运行。例如:

  • ./a.out有效,因为.指的是您所在的目录
  • 如果../a.out位于父目录中,则{li> a.out可以正常工作(..引用父目录) 目录
  • projectdir/a.out也可以,如果您的程序在子目录中,projectdir