在Linux中运行C程序

5
有人能够解释一下,为什么我们要使用./a.out来运行程序吗?这背后是否有任何含义?请给出解释。

2
欢迎来到SO。您能否更准确地阐述您的问题?您不理解的是前面的./还是a.out本身?您要寻找什么样的“含义”? - Jens Gustedt
5个回答

9
该名称代表"汇编输出",它是编译器生成的可执行文件的默认名称(现在仍是)。需要在其前面加上./的原因是当前目录(.)不在$PATH中,因此必须明确给出可执行文件的路径。

3
如果你指的是./部分,那是为了安全起见。Windows默认将当前目录添加到PATH中,这很危险(存在DLL注入等风险)。如果你指的是a.out部分,那只是一个名称(来自a.out格式的名称),你可以通过修改gcc -o参数来更改它。

另一种情况是,格式名称“aout”(在任何现代系统上都不再使用)来自文件名a.out,这是Unix系统上“汇编器输出”的传统文件名。 - R.. GitHub STOP HELPING ICE

2
运行像bash这样的可执行文件时,必须将可执行文件添加到您的PATH环境变量中,以便bash可以找到并运行该程序。
前缀"./"是指定可执行文件的完整路径的简写方式,因此bash不需要查询PATH变量(通常不包含当前目录)来运行它。
对于a.out(汇编器输出的缩写),如果未指定输出文件名,则它是像gcc这样的编译器的默认可执行文件输出。

1

值得你更深入地了解C语言及其程序编译的方式。

基本上,你的源代码被发送到预处理器,在那里指令如#define#include被加载(例如进入内存)。因此,任何你想使用的库都会被加载,例如:

#include <math.h>

基本上,math.h 的内容将被“粘贴”到定义它的源代码中。

一旦所有这些东西都被展开,编译器 将把您的源代码转换为目标代码,即二进制代码。如果您没有指定构建名称,则 a.out 是输出的默认名称。


0
gcc -o mynewprogram mynewprogram.c

a.out是编译器的默认名称。据我所知,这是因为链接过程被跳过,它不会被编译为对象或库。


2
这些并没有描述其中的含义。 - Felix Kling
只是语法问题,请原谅我。 - Micromega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接