主页 > 最新imtoken官网下载地址 > 3.2 从源代码编译比特币核心

3.2 从源代码编译比特币核心

最新imtoken官网下载地址 2023-06-26 05:08:34

3.2 从源代码编译比特币核心

Bitcoin Core 的源代码可以 ZIP 格式下载,也可以从 GitHub 克隆官方源代码库。 在 GitHub 比特币页面上,选择“下载 ZIP”。 或者,使用 git 命令行在您的系统上创建源代码的本地副本。

提示 在本章的许多示例中,我们将使用操作系统的命令行界面(也称为“shell”),通过“终端”应用程序访问。 shell 将在需要输入命令的地方显示一个提示符,然后 shell 将以一些文本和一个新提示符作为响应。 该提示符在不同系统上可能看起来不同,但在以下示例中,它由符号 $ 表示。 在下面的例子中,当你看到 $ 符号后面跟着文本时,不要输入 $ 符号,而是直接输入下面的命令,然后按 ENTER 键执行命令。 在示例中,每个命令下面的行是操作系统对该命令的响应。 当您看到下一个 $ 符号作为前缀时,您应该继续输入以下命令并重复该过程。

在此示例中,我们使用 git 命令创建源代码的本地副本(“克隆”):

  1. $ git clone https://github.com/bitcoin/bitcoin.git
  2. Cloning into 'bitcoin'...
  3. remote: Counting objects: 66193, done.
  4. remote: Total 66193 (delta 0), reused 0 (delta 0), pack-reused 66193
  5. Receiving objects: 100% (66193/66193), 63.39 MiB | 574.00 KiB/s, done.
  6. Resolving deltas: 100% (48395/48395), done.
  7. Checking connectivity... done.
  8. $

提示 Git 是使用最广泛的分布式版本控制系统,也是软件开发人员最重要的工具之一。 如果没有安装操作系统,需要先安装git命令行或者git的图形界面。

当 git clone 操作完成时,当前目录(在比特币的情况下)具有源代码存储库的完整本地副本。 通过在提示符下键入“cd bitcoin”进入此目录:

$ cd 比特币

3.2.1 选择比特币核心版本

默认情况下,本地副本将与最新代码同步,但最新版本可能不稳定或测试。 所以在编译代码之前,查看release tag标签,选择具体的版本。 这会将本地副本与关键字标签标识的代码库的特定快照同步。 开发人员使用标签来标记代码的特定版本号。 首先,要找到可用的标签,我们使用 git tag 命令:

  1. $ git tag
  2. v0.1.5
  3. v0.1.6test1
  4. v0.10.0
  5. ...
  6. v0.11.2
  7. v0.11.2rc1
  8. v0.12.0rc1
  9. v0.12.0rc2
  10. ...

标签列表显示所有已发布的比特币版本。 按照惯例,用于测试的候选版本具有后缀“rc”。 可以在生产系统上运行的稳定版本没有后缀。 从上面的列表中,选择最高版本,在撰写本文时为 v0.11.2。 要将您的本地代码与此版本同步,请使用 git checkout 命令:

  1. $ git checkout v0.11.2
  2. HEAD is now at 7e27892... Merge pull request #6975

输入命令 git status 确认选中的版本已经勾选:

  1. $ git status
  2. HEAD detached at v0.11.2
  3. nothing to commit, working directory clean

3.2.2 配置和构建比特币核心

帮助文档包含在源代码中,可以在许多文件中找到。 在提示符下输入“more README.md”可以查看bitcoin目录下最重要的文档README.md的内容,使用空格键翻页。 在本章中,我们将在 Linux 上部署命令行比特币客户端,也称为 bitcoind。 通过键入“more doc/build-unix.md”,查看在您的系统上编译 bitcoind 命令行客户端的说明。 doc目录下还有macOS和Windows的文档,分别是build-osx.md或build-windows.md。

仔细查看文档第一部分提到的依赖库,这些库必须在开始构建比特币客户端之前存在。 如果缺少这些库,构建过程将报错并失败。 如果构建失败提示缺少这些依赖库,那么必须重新安装,然后从刚才提示错误的地方重新开始构建。 安装这些依赖项后,您可以使用 autogen.sh 脚本生成一组脚本来启动构建过程。

请注意,自 0.9 以来,比特币核心构建过程已更改为使用 autogen/configure/make 系统。 0.9 之前的旧版本使用简单的 Makefile,其方法与下面的示例略有不同。 建议按照发布说明进行操作。 0.9引入的autogen/configure/make用于后续版本构建过程,下面示例演示的就是这个过程。

  1. $ ./autogen.sh
  2. ...
  3. glibtoolize: copying file 'build-aux/m4/libtool.m4'
  4. glibtoolize: copying file 'build-aux/m4/ltoptions.m4'
  5. glibtoolize: copying file 'build-aux/m4/ltsugar.m4'
  6. glibtoolize: copying file 'build-aux/m4/ltversion.m4'
  7. ...
  8. configure.ac:10: installing 'build-aux/compile'
  9. configure.ac:5: installing 'build-aux/config.guess'
  10. configure.ac:5: installing 'build-aux/config.sub'
  11. configure.ac:9: installing 'build-aux/install-sh'
  12. configure.ac:9: installing 'build-aux/missing'
  13. Makefile.am: installing 'build-aux/depcomp'
  14. ...

autogen.sh 脚本创建一组自动配置脚本,这些脚本询问系统以发现正确的设置并确保依赖库是完整的。 其中最重要的是配置脚本,它提供了许多用于自定义构建过程的可选选项。 输入“./configure --help”查看各种选项:

  1. $ ./configure --help
  2. `configure' configures Bitcoin Core 0.11.2 to adapt to many kinds of systems.
  3. Usage: ./configure [OPTION]... [VAR=VALUE]...
  4. ...
  5. Optional Features:
  6. --disable-option-checking ignore unrecognized --enable/--with options
  7. --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
  8. --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
  9. --enable-wallet enable wallet (default is yes)
  10. --with-gui[=no|qt4|qt5|auto]
  11. ...

从帮助文档中可以看出,配置脚本允许使用 --enable-FEATURE 和 --disable-FEATURE 标志来启用或禁用 bitcoind 的某些功能,使用此命令将 FEATURE 替换为功能名称。 在本章中,我们将构建具有所有默认功能的 bitcoind 客户端。 我们不会使用配置标志调整功能比特币源码研读,但需要了解客户端能够实现可选功能。 如果您在学术环境中,计算机实验室限制可能要求将应用程序安装在当前帐户的主目录中(例如,使用 --prefix=$HOME)。

以下选项可以覆盖配置脚本的默认行为:

--prefix=$HOME

这将覆盖生成的可执行文件的默认安装位置(默认为 /usr/local/)。 使用 $HOME 将所有内容放在您的主目录中,但也可以放在其他路径中。

--禁用钱包

这用于禁用钱包功能。

--with-不兼容-bdb

如果您正在构建钱包,则允许使用不兼容的 Berkeley DB 库版本。

--with-gui=否

不要建立图形用户界面,图形界面需要Qt库。 这只会构建服务器和命令行客户端。

接下来,运行配置脚本以自动发现所有必需的库并创建自定义构建脚本:

  1. $ ./configure
  2. checking build system type... x86_64-unknown-linux-gnu
  3. checking host system type... x86_64-unknown-linux-gnu
  4. checking for a BSD-compatible install... /usr/bin/install -c
  5. checking whether build environment is sane... yes
  6. checking for a thread-safe mkdir -p... /bin/mkdir -p
  7. checking for gawk... gawk
  8. checking whether make sets $(MAKE)... yes
  9. ...
  10. [many pages of configuration tests follow]
  11. ...
  12. $

如果一切顺利,配置命令运行完成后,它会自动创建一个可自定义的构建脚本。 bitcoind 可以使用构建脚本进行编译。 如果缺少库或错误​​,configure 命令会提示错误。 发生错误,通常是由于缺少或不兼容的库。 这需要查看文档以确认所有依赖库都已安装。 然后再次运行配置并查看错误是否消失。

3.2.3 构建比特币核心可执行文件

下一步是开始编译源代码。 这个过程取决于CPU的处理能力和内存大小,但一般可能需要1个小时才能完成。 在编译过程中,您应该在几秒钟或几分钟后查看输出。 如果出现问题,您将看到错误。 如果中断,编译过程可以随时恢复。 输入make命令开始编译:

  1. $ make
  2. Making all in src
  3. CXX crypto/libbitcoinconsensus_la-hmac_sha512.lo
  4. CXX crypto/libbitcoinconsensus_la-ripemd160.lo
  5. CXX crypto/libbitcoinconsensus_la-sha1.lo
  6. CXX crypto/libbitcoinconsensus_la-sha256.lo
  7. CXX crypto/libbitcoinconsensus_la-sha512.lo
  8. CXX libbitcoinconsensus_la-hash.lo
  9. CXX primitives/libbitcoinconsensus_la-transaction.lo
  10. CXX libbitcoinconsensus_la-pubkey.lo
  11. CXX script/libbitcoinconsensus_la-bitcoinconsensus.lo
  12. CXX script/libbitcoinconsensus_la-interpreter.lo
  13. [... many more compilation messages follow ...]
  14. $

如果CPU是多核的,需要设置并行编译作业需要的核数。 例如,输入 make -j 2 以使用两个内核。 如果一切顺利,bitcoind 编译完成。 您可以使用 make check 命令运行单元测试包以检查链接库是否损坏。 最后一步是 sudo make install 命令,它会安装 bitcoind 可执行文件,系统可能会提示您输入用户密码比特币源码研读,因为此步骤需要管理员权限:

  1. $ make check && sudo make install
  2. Password:
  3. Making install in src
  4. ../build-aux/install-sh -c -d '/usr/local/lib'
  5. libtool: install: /usr/bin/install -c bitcoind /usr/local/bin/bitcoind
  6. libtool: install: /usr/bin/install -c bitcoin-cli /usr/local/bin/bitcoin-cli
  7. libtool: install: /usr/bin/install -c bitcoin-tx /usr/local/bin/bitcoin-tx
  8. ...
  9. $

bitcoind 的默认安装位置是 /usr/local/bin。 查询以下两个可执行文件的路径,确认bitcoin是否安装成功。

  1. $ which bitcoind
  2. /usr/local/bin/bitcoind
  3. $ which bitcoin-cli
  4. /usr/local/bin/bitcoin-cli