在Linux中运行C程序

时间:2011-03-19 10:18:47

标签: c linux

有人可以向我解释为什么我们使用 ./ a.out 来运行程序?

这背后有什么意义吗?

有人可以提供解释吗?

5 个答案:

答案 0 :(得分:9)

该名称代表"assembler output",并且(现在仍然是)编译器生成的可执行文件的默认名称。你需要./的原因是因为当前目录(.)不在$PATH中,因此必须明确给出可执行文件的路径。

答案 1 :(得分:3)

如果您的意思是./部分,那就是为了安全起见。 Windows默认情况下将当前目录附加到PATH,这是不好的(存在DLL注入的风险,依此类推)。 如果你的意思是a.out部分,它只是一个名称(来自格式a.out的名称),你可以通过修改gcc -o参数来改变它。

答案 2 :(得分:2)

当运行像bash这样的shell这样的可执行文件时,可执行文件必须位于PATH bash的{​​{1}}环境变量中才能找到并运行该程序。

./前缀是指定可执行文件的完整路径的简写方式,因此bash不需要查询PATH变量(通常不包含当前目录)来运行它。 / p>

[对于a.out(“汇编程序输出”的缩写),如果没有指定输出文件名,它是gcc之类的编译器的默认可执行输出。]

答案 3 :(得分:1)

值得你多看一下C和C程序编译的方式。

基本上,您的源代码会发送到预处理器,其中会加载#define#include等指令(例如,加载到内存中)。因此,您要使用的任何库都会被加载,例如

#include <math.h>

基本上会将math.h的内容“粘贴”到源代码中定义的位置。

一旦扩展了所有这些内容,编译器就会将您的源代码转换为目标代码,这是二进制代码的源代码。如果您未指定构建名称, a.out 是输出的默认名称。

答案 4 :(得分:0)

gcc -o mynewprogram mynewprogram.c

a.out是编译器的默认名称。 AFAIK是因为跳过了链接过程而且它没有被编译为对象或库。