繁体   English   中英

执行已编译的C程序

[英]Executing a compiled C program

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

gcc main.c

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

a.out

并按Enter键,它说“找不到命令”。 但如果我输入

./a.out

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

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

为什么在脚本名称之前需要./(dot-slash)才能在bash中运行它?

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

那是因为a.out不在你的$PATH
您提供的命令由shell在$PATHlinux中的环境变量)中搜索。

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

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

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

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

看一下这样的路径列表:

$ env|grep PATH

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

$ export PATH=$PATH:.

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

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

  • /bin
  • /usr/bin
  • /usr/local/bin
  • 等等(你可以通过运行echo $PATH来检查它们)

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

  • ./a.out作用是因为. 指的是你所在的目录
  • 如果a.out在父目录( ..指的是父目录)中,则../a.out可以工作
  • projectdir/a.out也适用,如果你的程序是在子目录, projectdir

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM