在Linux上编译软件并且运行的入门示例
一、linux下的编译简述
我们的系统上安装了许多开源和商业软件包,可供所有用户使用。然而,用户可以在自己的主目录中下载和安装小软件包,这些软件通常只对他们个人有用。
安装该软件需要执行多个步骤。
- 找到并下载源代码
- 解压源码
- 编译代码
- 安装生成的可执行文件
- 设置安装目录的路径
在上述步骤中,最困难的可能是编译阶段。
1、编译源代码
所有高级语言代码都必须转换为计算机可以理解的形式。例如,C语言源代码被转换为称为汇编语言的低级语言。然后,前一阶段生成的汇编语言代码被转换为由计算机直接理解的代码片段组成的目标代码。编译程序的最后阶段涉及将所有目标代码片段链接在一起形成单个可执行程序。
手动执行所有这些步骤非常复杂,超出了普通用户的能力。已经为程序员和最终用户开发了许多实用程序和工具来简化这些步骤。
2、make 和 Makefile
该make
命令允许程序员管理大型程序或程序组的编译。它通过跟踪整个程序的哪些部分已更改,仅编译自上次编译以来已更改的程序部分来帮助开发大型程序。
该程序从名为Makefilemake
的文本文件中获取其编译规则集,该文件与源文件位于同一目录中。它包含有关如何编译软件的信息,例如优化级别、是否在可执行文件中包含调试信息。它还包含有关在何处安装已编译的二进制文件(可执行文件)、手册页、数据文件、依赖库文件、配置文件等的信息。
某些软件包要求您手动编辑 Makefile 以设置最终安装目录和任何其他参数。然而,许多软件包现在都与 GNU 配置实用程序一起分发。
3、配置
许多年前,随着 UNIX 和 Linux 变体的增加,编写可以在所有变体上运行的程序变得更加困难。开发人员通常无法访问每个系统,并且某些系统的特性随着版本的不同而发生变化。GNU 配置和构建系统简化了作为源代码分发的程序的构建。所有程序都是使用简单、标准化的两步过程构建的。程序构建者不需要安装任何特殊工具来构建程序。
shellconfigure
脚本尝试猜测编译期间使用的各种与系统相关的变量的正确值。它使用这些值在包的每个目录中创建一个Makefile 。
编译包的最简单方法是:
cd
到包含包源代码的目录。- 键入
./configure
为您的系统配置包。 - 键入
make
以编译包。 - 键入
make install
以安装程序以及任何数据文件和文档。 - (可选)键入
make clean
以从源代码目录中删除程序二进制文件和目标文件
配置实用程序支持多种选项。您通常可以使用该--help
选项来获取特定配置脚本的功能清单。
您可能使用的唯一通用选项是--prefix
和 --exec-prefix
选项。这些选项用于指定安装目录。
--prefix
选项指定的目录将保存与机器无关的文件,例如文档、数据和配置文件。
--exec-prefix
选项命名的目录(通常是 --prefix 目录的子目录)将保存与机器相关的文件,例如可执行文件。
二、下载软件包
对于这个例子,这里提供一个免费小软件,可以在不同的测量单位之间进行转换。
链接:https://pan.baidu.com/s/12_P_7MrKYRBOLU8Ge4VCpw?pwd=7gby
提取码:7gby
下载完成之后解压并进入文件夹
tar -zxvf units-1.87.tar.gz
cd units-1.87
首先要做的是仔细阅读README和INSTALL文本文件(使用less命令)。这些包含有关如何编译和运行软件的重要信息。units包使用GNU配置系统来编译源代码。我们需要指定安装目录。
$ ./configure --prefix=$HOME/units187
注意:$HOME变量是环境变量的一个示例。$HOME的值是指向主目录的路径。只需键入
echo $HOME就可以显示变量的内容。
如果 configure 运行正确,它将创建一个包含所有必要选项的 Makefile。
现在可以继续通过运行make
命令来构建包。一两分钟后(取决于计算机的速度),可执行文件将被创建。如果您在屏幕上没有看到任何错误,那么软件很可能已经正确编译。如果一切正常,您现在可以运行make install命令安装软件包。
这会将文件安装到您指定的~/units187./configure
目录中。
您现在可以运行该软件了(假设一切正常)。
cd ~/units187
进入目录之后输入,就会运行程序
./units
之后就可以按照提示进行输入了