Linux系统编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.3 它是如何工作的

在系统上安装软件总是需要root权限,要么通过一个常规的root用户,要么通过sudo。例如,Ubuntu系统使用sudo并禁用了常规的root用户。而Debian系统在默认安装中并不使用sudo。如果要使用sudo,你需要自行设置。

Debian系统和Ubuntu系统都使用apt包管理器安装软件。如果想要获取存储库中可用的最新版本,你需要更新缓存。这也是我们要在安装软件包之前运行apt-get update命令的原因。

基于Fedora的系统使用红帽包管理(RPM)系统来安装软件。在较新的版本上,我们使用dnf安装软件包。如果你使用的是旧版本,则可能需要使用yum代替dnf。

在以上两种情况下,我们都安装了一组包,其中包含本书所需的一些实用程序、手册页和编译器。

安装完成后,在尝试编译任何代码之前,我们查询了GCC和Make的版本。

我们编译了一个简单的C程序。首先,我们直接使用GCC进行编译,随后使用了Make。第一个关于GCC的示例生成了一个名为a.out的程序,a.out代表汇编器输出(assembler output)。这个名字历史悠久,可以追溯至1971年UNIX的第一个版本。尽管文件格式a.out已经不再使用,但这个名字今天仍然存在。

然后,我们使用-o选项指定了一个程序名称,其中-o代表输出。这将会生成一个具有自定义名称的程序。我们将程序命名为first-example。

当我们使用Make时,不需要输入源代码的文件名,只需要写下想要编译器生成的二进制程序的名称。Make程序足够聪明,可以确定源代码具有与.c结尾的文件相同的名称。

当我们执行程序时,运行./first-example。./序列告诉shell我们想要在当前目录下运行程序。如果省略./,程序将无法正常执行。默认情况下,shell只执行$PATH变量所指定目录下的程序,通常是/bin、/usr/bin、/sbin和/usr/sbin。