在 Red Hat Linux 发行版中,所有程序都以 RPM 文件的形式提供。RPM 文件,也称为软件包,是一种分发软件的方式,使其可以轻松地安装、升级、查询和删除。然而,在 Unix 世界中,软件包分发的默认标准仍然是通过所谓的tarball。Tarball 只是简单的压缩文件,可以使用 tar 实用程序读取和解压缩。与使用 RPM 相比,从 tar 安装通常要繁琐得多。那么我们为什么要选择这样做呢?
遗憾的是,开发人员和程序员需要几周时间才能将软件包的最新版本转换为 RPM,因为许多开发人员首先将它们发布为tarball.
当开发人员和供应商发布新的 RPM 时,他们会包含许多通常不必要的选项。这些组织和公司不知道您需要哪些选项,不需要哪些选项,因此他们会包含最常用的选项以满足每个人的需求。
通常 RPM 没有针对您的特定处理器进行优化;像 Red Hat Linux 这样的公司基于标准 PC 构建 RPM。这使得他们的 RPM 软件包可以安装在各种计算机上,因为为 i386 机器编译的程序可以适用于所有系统。
有时您下载并安装 RPM,这些 RPM 是世界各地其他人构建并为您提供的。在某些情况下,这可能会造成冲突,具体取决于个人构建软件包的方式,例如错误、安全性和上面描述的所有其他问题。
程序是计算机可以执行的东西。最初,有人用他/她可以理解的编程语言编写了源代码,例如,C、C++。程序源代码对于编译器也很有意义,编译器将指令转换为适合所需处理器的二进制文件,例如 386 或类似的处理器。这些可执行程序的现代文件格式是 Elf。程序员使用编译器编译他的源代码,并获得某种结果。早期尝试编译失败,或者编译后未能按预期运行,这并不罕见。编程的一半工作是追踪和修复这些问题,即调试。
对于初学者来说,还有更多与源代码编译相关的方面和新词汇是您必须了解的,这些包括但不限于
单文件程序非常罕见。通常有许多文件,例如*.c, *.cpp,等等,它们各自被编译成目标文件*.o然后链接到一个可执行文件。编译器通常用于执行链接,并在幕后调用 ld 程序。
Makefile 旨在帮助您每次以相同的方式构建程序。它们通常也有助于提高速度。make 程序使用 Makefile 中的依赖关系来决定程序的哪些部分需要重新编译。如果您更改了五十个源文件中的一个,您希望通过一次编译和一个链接步骤来完成,而不是从头开始。
程序不仅可以链接到目标文件*.o还可以链接到库,库是目标文件的集合。链接到库有两种形式:静态链接,代码进入可执行文件;动态链接,代码在程序开始运行时收集。
以前,常见的做法是在不重新编译可执行文件的情况下对其进行更正。现在这种做法已经过时了;在现代,人们更改了整个源代码的一小部分,并将更改放入一个名为补丁的文件中。当需要程序的不同版本时,可以通过这种方式发布对代码的小改动,从而省去了拥有两个大型发行版的麻烦。
编译和链接中的错误通常是错别字、遗漏和语言误用。检查为调用的函数使用了正确的包含文件。未引用的符号是不完整的链接步骤的标志。还要检查您的系统上是否安装了必要的开发库 GLIBC 或工具 GCC、DEV86、AUTOMAKE、等等。
调试是一个很大的话题。通常,在代码中包含语句来告知您正在发生的事情会有所帮助。为了避免淹没在输出中,您有时可以让他们仅打印循环中的前 3 次迭代。检查变量是否在模块之间正确传递通常很有帮助。熟悉您的调试工具。