主页 > 最新imtoken官网下载地址 > 3.2 从源代码编译比特币核心
3.2 从源代码编译比特币核心
3.2 从源代码编译比特币核心
Bitcoin Core 的源代码可以 ZIP 格式下载,也可以从 GitHub 克隆官方源代码库。 在 GitHub 比特币页面上,选择“下载 ZIP”。 或者,使用 git 命令行在您的系统上创建源代码的本地副本。
提示 在本章的许多示例中,我们将使用操作系统的命令行界面(也称为“shell”),通过“终端”应用程序访问。 shell 将在需要输入命令的地方显示一个提示符,然后 shell 将以一些文本和一个新提示符作为响应。 该提示符在不同系统上可能看起来不同,但在以下示例中,它由符号 $ 表示。 在下面的例子中,当你看到 $ 符号后面跟着文本时,不要输入 $ 符号,而是直接输入下面的命令,然后按 ENTER 键执行命令。 在示例中,每个命令下面的行是操作系统对该命令的响应。 当您看到下一个 $ 符号作为前缀时,您应该继续输入以下命令并重复该过程。
在此示例中,我们使用 git 命令创建源代码的本地副本(“克隆”):
$ git clone https://github.com/bitcoin/bitcoin.git
Cloning into 'bitcoin'...
remote: Counting objects: 66193, done.
remote: Total 66193 (delta 0), reused 0 (delta 0), pack-reused 66193
Receiving objects: 100% (66193/66193), 63.39 MiB | 574.00 KiB/s, done.
Resolving deltas: 100% (48395/48395), done.
Checking connectivity... done.
$
提示 Git 是使用最广泛的分布式版本控制系统,也是软件开发人员最重要的工具之一。 如果没有安装操作系统,需要先安装git命令行或者git的图形界面。
当 git clone 操作完成时,当前目录(在比特币的情况下)具有源代码存储库的完整本地副本。 通过在提示符下键入“cd bitcoin”进入此目录:
$ cd 比特币
3.2.1 选择比特币核心版本
默认情况下,本地副本将与最新代码同步,但最新版本可能不稳定或测试。 所以在编译代码之前,查看release tag标签,选择具体的版本。 这会将本地副本与关键字标签标识的代码库的特定快照同步。 开发人员使用标签来标记代码的特定版本号。 首先,要找到可用的标签,我们使用 git tag 命令:
$ git tag
v0.1.5
v0.1.6test1
v0.10.0
...
v0.11.2
v0.11.2rc1
v0.12.0rc1
v0.12.0rc2
...
标签列表显示所有已发布的比特币版本。 按照惯例,用于测试的候选版本具有后缀“rc”。 可以在生产系统上运行的稳定版本没有后缀。 从上面的列表中,选择最高版本,在撰写本文时为 v0.11.2。 要将您的本地代码与此版本同步,请使用 git checkout 命令:
$ git checkout v0.11.2
HEAD is now at 7e27892... Merge pull request #6975
输入命令 git status 确认选中的版本已经勾选:
$ git status
HEAD detached at v0.11.2
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用于后续版本构建过程,下面示例演示的就是这个过程。
$ ./autogen.sh
...
glibtoolize: copying file 'build-aux/m4/libtool.m4'
glibtoolize: copying file 'build-aux/m4/ltoptions.m4'
glibtoolize: copying file 'build-aux/m4/ltsugar.m4'
glibtoolize: copying file 'build-aux/m4/ltversion.m4'
...
configure.ac:10: installing 'build-aux/compile'
configure.ac:5: installing 'build-aux/config.guess'
configure.ac:5: installing 'build-aux/config.sub'
configure.ac:9: installing 'build-aux/install-sh'
configure.ac:9: installing 'build-aux/missing'
Makefile.am: installing 'build-aux/depcomp'
...
autogen.sh 脚本创建一组自动配置脚本,这些脚本询问系统以发现正确的设置并确保依赖库是完整的。 其中最重要的是配置脚本,它提供了许多用于自定义构建过程的可选选项。 输入“./configure --help”查看各种选项:
$ ./configure --help
`configure' configures Bitcoin Core 0.11.2 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...
...
Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-wallet enable wallet (default is yes)
--with-gui[=no|qt4|qt5|auto]
...
从帮助文档中可以看出,配置脚本允许使用 --enable-FEATURE 和 --disable-FEATURE 标志来启用或禁用 bitcoind 的某些功能,使用此命令将 FEATURE 替换为功能名称。 在本章中,我们将构建具有所有默认功能的 bitcoind 客户端。 我们不会使用配置标志调整功能比特币源码研读,但需要了解客户端能够实现可选功能。 如果您在学术环境中,计算机实验室限制可能要求将应用程序安装在当前帐户的主目录中(例如,使用 --prefix=$HOME)。
以下选项可以覆盖配置脚本的默认行为:
--prefix=$HOME
这将覆盖生成的可执行文件的默认安装位置(默认为 /usr/local/)。 使用 $HOME 将所有内容放在您的主目录中,但也可以放在其他路径中。
--禁用钱包
这用于禁用钱包功能。
--with-不兼容-bdb
如果您正在构建钱包,则允许使用不兼容的 Berkeley DB 库版本。
--with-gui=否
不要建立图形用户界面,图形界面需要Qt库。 这只会构建服务器和命令行客户端。
接下来,运行配置脚本以自动发现所有必需的库并创建自定义构建脚本:
$ ./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
...
[many pages of configuration tests follow]
...
$
如果一切顺利,配置命令运行完成后,它会自动创建一个可自定义的构建脚本。 bitcoind 可以使用构建脚本进行编译。 如果缺少库或错误,configure 命令会提示错误。 发生错误,通常是由于缺少或不兼容的库。 这需要查看文档以确认所有依赖库都已安装。 然后再次运行配置并查看错误是否消失。
3.2.3 构建比特币核心可执行文件
下一步是开始编译源代码。 这个过程取决于CPU的处理能力和内存大小,但一般可能需要1个小时才能完成。 在编译过程中,您应该在几秒钟或几分钟后查看输出。 如果出现问题,您将看到错误。 如果中断,编译过程可以随时恢复。 输入make命令开始编译:
$ make
Making all in src
CXX crypto/libbitcoinconsensus_la-hmac_sha512.lo
CXX crypto/libbitcoinconsensus_la-ripemd160.lo
CXX crypto/libbitcoinconsensus_la-sha1.lo
CXX crypto/libbitcoinconsensus_la-sha256.lo
CXX crypto/libbitcoinconsensus_la-sha512.lo
CXX libbitcoinconsensus_la-hash.lo
CXX primitives/libbitcoinconsensus_la-transaction.lo
CXX libbitcoinconsensus_la-pubkey.lo
CXX script/libbitcoinconsensus_la-bitcoinconsensus.lo
CXX script/libbitcoinconsensus_la-interpreter.lo
[... many more compilation messages follow ...]
$
如果CPU是多核的,需要设置并行编译作业需要的核数。 例如,输入 make -j 2 以使用两个内核。 如果一切顺利,bitcoind 编译完成。 您可以使用 make check 命令运行单元测试包以检查链接库是否损坏。 最后一步是 sudo make install 命令,它会安装 bitcoind 可执行文件,系统可能会提示您输入用户密码比特币源码研读,因为此步骤需要管理员权限:
$ make check && sudo make install
Password:
Making install in src
../build-aux/install-sh -c -d '/usr/local/lib'
libtool: install: /usr/bin/install -c bitcoind /usr/local/bin/bitcoind
libtool: install: /usr/bin/install -c bitcoin-cli /usr/local/bin/bitcoin-cli
libtool: install: /usr/bin/install -c bitcoin-tx /usr/local/bin/bitcoin-tx
...
$
bitcoind 的默认安装位置是 /usr/local/bin。 查询以下两个可执行文件的路径,确认bitcoin是否安装成功。
$ which bitcoind
/usr/local/bin/bitcoind
$ which bitcoin-cli
/usr/local/bin/bitcoin-cli