如何在 Linux 中从源代码编译和安装软件
尽管 Linux 的包管理器使软件安装变得更加容易,但有时您不得不从源代码构建包。
您想要修复软件包中的错误,还是只想修改软件包以满足您的需求? Linux 已经满足了您的需求。
大多数 Linux 软件包都是免费和开源的,让您可以根据自己的喜好自由定制或修改任何软件。此外,您还可以自由地查看 Linux 软件包的源代码,以从其他软件项目中学习良好的架构实践和编码模式。
让我们探讨如何在 Linux 上从源代码编译和安装软件包。
第 1 步:安装所需的工具
Linux 为您提供了从源代码编译、构建和安装软件所需的所有必要工具。
大多数 Linux 软件都是用 C 或 C++ 编程语言编写的,因此,您需要一个 C 或 C++ 编译器。例如,用于构建包的 GNU 编译器集合 (GCC) 和 CMake。
除此之外,您还需要其他软件包,例如curl 和gettext。根据您的 Linux 发行版,您可以通过单个命令安装所需的工具,如下所示。
在基于 Debian 的发行版(例如 Ubuntu)上:
sudo apt install libz-dev libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext cmake gcc curl
在 Arch Linux 及其衍生产品上:
sudo pacman -S base-devel
在基于 RPM 的发行版(例如 Fedora、RHEL 等)上:
sudo dnf install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel perl-devel zlib-devel gcc curl cmake
第二步:下载包源码
对于本指南,我们将从源安装 Git 包。我们选择 Git 是因为它在软件工程师和开发人员中广泛使用。
您可以编译的大多数软件包都可以在相关软件包的官方网站上找到。您可以使用curl命令行工具下载源代码文件。或者,您可以使用 wget 或 GUI。
将源代码下载到PC上的Downloads文件夹中,然后使用cd命令切换到Downloads目录。
cd ~/Downloads
进入“下载”文件夹后,您可以使用curl 下载 Git 源代码,如下所示。在本指南中,我们将下载 Git 版本 2.26.2,但您可以随意选择任何版本。
curl --output git.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gz
curl 命令指定应将源代码放置在名为 git.tar.gz 的压缩文件中。
下载:Linux 版 Git 源代码
在大多数情况下,源代码将打包在压缩文件夹中,以便更轻松地下载并更好地组织源代码文件。
要提取压缩文件的内容,您可以使用 tar 命令。
tar -zxf git.tar.gz
第三步:编译源代码
接下来,转到新提取的文件夹。在本例中,名称将为“git-2.26.2”,当然,如果您下载了不同版本的 Git,则文件夹名称会有所不同。
cd git-2.26.2
查看 README.md 或 INSTALL 文件总是一个好主意,因为它们包含有关如何编译和安装包的宝贵信息。这些文件通常位于源代码的根文件夹中。
另一个重要的文件是configure脚本。它会检查要编译的包的软件依赖关系,如果脚本发现缺少依赖关系,您将看到一条错误消息。
通过执行脚本来配置和准备源代码。该命令将为您要编译和安装的软件创建 make 文件和配置。
./configure
第 4 步:构建软件包
现在源代码已配置并编译,您可以按如下方式构建软件:
make
make 命令使用 Makefile,其中包含有关如何构建软件包的必要说明。
编译过程将需要一些时间,具体取决于计算机的处理能力和包的大小。
第五步:安装软件包
如果您已经走到这一步,那么恭喜您,您已经成功地从源代码编译并构建了 Linux 软件。
在最后一步中,您将安装刚刚从源代码构建的 Git 软件包。此命令通过将构建文件复制到 PC 上的正确位置来安装新编译的包。
sudo make install
使用以下命令检查刚刚安装的 Git 版本:
git --version
输出应该与下面的类似。版本号可能会有所不同,具体取决于您下载的软件包。
在 Linux 上安装软件的替代方法
本指南以 Git 作为研究案例,介绍了如何在 Linux 上从源代码编译和构建软件。从源代码安装软件给您很大的自由来根据自己的喜好定制软件,这是一件了不起的事情。
大多数 Linux 发行版在安装软件时都为您提供了许多选项。例如,在 Arch Linux 上,您可以使用 Pacman 和 Yay 包管理器。