



比特币核心的源代码可以通过下载压缩包或者从GitHub克隆源代码库的方式获得。在比特币核心下载页面( https://oreil.ly/hN9g1 ),选择最新版本并下载源代码的压缩包。或者,使用Git命令行工具从GitHub的比特币页面( https://oreil.ly/BdOwl )创建一份本地的源代码副本。
在本章的许多例子中,我们将使用操作系统的命令行界面(也被称为“shell”),通过一个名为“终端”的应用程序进行访问。当shell显示一个提示符时,你输入一个命令,shell随后以某些文本响应,并为你的下一个命令提供一个新的提示符。提示符在不同系统中可能有所差异,但在接下来的例子中,我们用一个$符号来表示。在例子中,当你看到$符号后面的文本时,不要输入$符号,而是直接输入其后的命令,然后按Enter键来执行该命令。在例子中,每个命令下面的行是操作系统对那个命令的响应。当你看到下一个$前缀时,你就会知道这是一个新命令,以此类推。
我们使用git命令来创建源代码的本地副本(“克隆”):
Git是使用最广泛的分布式版本控制系统,是所有软件开发者工具箱中不可或缺的工具。如果你的操作系统上还没有Git,那么你可能需要安装git命令行工具,或者Git的图形用户界面。
当Git克隆操作完成后,你将在bitcoin目录中拥有一个源代码仓库的完整本地副本。使用cd命令切换到这个目录:
默认情况下,本地副本将与最新代码同步,这可能是比特币的不稳定版本或测试版本。在编译代码之前,可以通过选择一个发布标签来指定特定版本。这将使本地副本与代码库的特定快照同步,这个快照由标签标识。开发者用标签来标记代码的特定发行版本。首先,我们使用git tag命令来查找可用的标签:
标签列表显示了比特币所有已发布的版本。按照惯例,供测试使用的候选版本会加上“rc”后缀。不加任何后缀的是指可以在生产系统上运行的稳定版本。从前述列表中选择最高版本标签,撰写本书时最高版本是v24.0.1。要将本地代码同步到这个版本,请使用git checkout命令:
你可以通过执行命令git status来确认你已经“签出”了想要的版本:
源代码中包含了很多文档资料。请查看位于比特币目录中的 README.md 文件,上面记录了重要文档名。本章节我们将在Linux(一个类UNIX系统)上构建比特币核心守护进程(服务器),也就是所谓的bitcoind。可阅读 doc/build-unix.md ,来获取在你的平台上编译bitcoind的指南。在 doc 目录下,你可以找到不同系统的指南文件,比如, build-windows.md 提供了Windows的构建指南。截至本书撰写时,文档已经包含了适用于Android、FreeBSD、NetBSD、OpenBSD、macOS(OSX)、UNIX及Windows系统的指导说明。
在开始编译比特币之前,请仔细检查构建文档的第一部分中所列的编译依赖条件。这些是在编译开始之前必须先在你的系统中存在的库。如果缺少这些依赖库,则构建过程将因错误而失败。如果发生这种情况是因为你漏掉了一个依赖库,那么你可以安装它,然后从中断的地方继续构建过程。假定所有依赖库已经安装,那么你可以通过运行 autogen.sh 脚本来开始构建过程,从而生成一系列构建脚本:
autogen.sh 脚本会创建一系列自动配置脚本,这些脚本会查询你的系统以配置正确的设置,并确保你拥有编译代码所需的所有必要库文件。其中,最重要的脚本是configure,它提供了许多不同的选项来自定义构建过程。使用--help参数可以查看各种选项:
configure脚本允许你通过使用--enable-FEATURE和--disable-FEATURE参数来启用或禁用bitcoind的某些功能,其中FEATURE须替换为帮助输出中列出的功能名称。在本章中,我们将使用所有默认功能构建bitcoind客户端。我们将不使用配置标志,但你应该查看它们以了解客户端有哪些可选功能。如果你处于学术环境中,那么计算机实验室的限制可能要求你在自己的用户主目录中安装应用程序(例如,使用--prefix=$HOME)。
以下是一些有用的选项,它们可以覆盖configure脚本的默认行为:
这将覆盖生成的可执行文件的默认安装位置(即 /usr/local/ )。使用$HOME将所有内容放入你的用户主目录,或者使用其他路径。
这用于禁用标准钱包实现。
如果你正在构建钱包,则这允许使用不兼容版本的Berkeley DB库。
不构建需要Qt库的图形用户界面。这样就只编译比特币核心的服务器和命令行版本。
接下来,运行configure脚本来自动发现所有必需的库,并为你的系统创建一个定制化的构建脚本:
如果一切顺利,则configure命令会最终生成定制化的构建脚本,让我们能够编译bitcoind。如果存在任何缺失的库或错误,则configure命令会终止,并且不会生成构建脚本,而是显示一个错误信息。如果发生错误,则通常是由缺少或有不兼容的库所造成的。请再次查阅构建文档,并确保你安装了所有缺失的依赖库。然后再次运行configure命令,看是否能修复这个错误。
接下来,你需要编译源代码,这一过程可能需要长达一个小时才能完成,具体时间取决于你的CPU速度和可用内存。如果出现错误,或者编译过程被中断,那么你可以随时通过输入make命令来恢复编译。现在,请输入make以开始编译可执行应用程序:
在一个配置多个CPU的高性能系统上,你可能会想要设置并行编译作业的数量。例如,执行make -j 2将会使用双核CPU(如果它们可用的话)。如果一切顺利,那么比特币核心现在已经编译完成。你应该使用make check命令运行单元测试套件,以确保链接的库一切工作正常。最后一步是使用make install命令将各种可执行文件安装到你的系统上。由于此步骤需要管理权限,因此可能会提示你输入用户密码:
bitcoind的默认安装路径为 /usr/local/bin 。你可以通过询问系统执行程序的路径来确认比特币核心已正确安装,操作如下: