有人可以向我解释为什么,特别是我们使用./a.out来运行一个程序吗?
这背后有什么意思吗?
有人可以提供一个解释吗?
该名称代表“汇编输出” ,并且(现在仍然是)编译器生成的可执行文件的默认名称。 之所以需要./
是因为当前目录( .
)不在$PATH
因此必须明确给出可执行文件的路径。
如果你的意思是./
部分,这是为了安全。 Windows默认将当前目录附加到PATH,这是不好的(有DLL注入的风险,等等)。 如果你的意思是a.out
部分,它只是一个名字(来自格式a.out的名字),你可以通过修改gcc -o参数来改变它。
当像bash那样运行像shell这样的可执行文件时,可执行文件必须位于PATH
环境变量中,以供bash
找到并运行程序。
./
前缀是指定可执行文件完整路径的简写方法,因此bash不需要查阅PATH变量(通常不包含当前目录)来运行它。
[对于a.out
(“汇编程序输出”的简称),如果没有指定输出文件名,则它是gcc
编译器的默认可执行输出。]
这将是值得你多看一些C和C程序编译的方式 。
从本质上讲,你的源代码被发送到预处理器 ,其中像#define
和#include
这样的指令被加载(例如到内存中)。 所以你要使用的任何库都被加载,例如
#include <math.h>
将基本上将math.h
的内容“粘贴”到定义点的源代码中。
一旦所有这些东西都被扩展出来, 编译器就会将你的源代码转换成二进制代码中的源代码。 如果不指定构建名称,则a.out是输出的默认名称。
gcc -o mynewprogram mynewprogram.c
a.out是编译器的默认名称。 AFAIK这是因为链接过程被跳过,它不被编译为对象或库。