本文转自:https://github.com/bitcoin/bitcoin
在比特币源码根目录下./doc/
中包含了环境搭建的完整过程
build-unix.md
ubuntu为例
- 首先,你必须确保每一步环境的下载和安装都是正确的,安装最后如果报错了要及时想办法解决再做下一步。
- Mac上用homebrew安装,复制命令进去以后,吃饭睡觉看电视,一个钟头以后回来就搭建好了;ubuntu上一句一句输入,基本网速快的话一个钟头也能搞定;Windows的话,....看你的造化了。
- 编译需要顺序这些命令:
$ ./autogen.sh $ ./configure $ make $ make install # optional
- configure可以带上一些参数:
$ ./configure -with-gui --enable-debug #会编译QT客户端项目,就是我截图展示的内容 $ ./configure -without-gui #要是QT环境不对,想要只编译命令行形式的客户端,可以用这个
- make命令也有几个常用参数,最好加sudo,因为有些权限问题:
$ make -B #全部重新编译 $ make clean #清除编译的内容 $ make -j 4 #编译过程时间长,电脑是4核的话这样写
- 如果你make以后没报错,恭喜你,可以打开客户端了。
- 文件目录结构有几点是你需要知道的:
./src/
为整个比特币核心的代码,由C++编写;./src/bitcoind
为比特币核心启动程序;./src/bitcoin-cli
为客户端控制程序,命令行中会用到;./qt/
为qt项目目录,qt的客户端其实就是调用了bitcoind和bitcoin-cli的接口。 - 安装目录(包含输出日志、区块链等等)默认在其他目录下:Linux在
~/.bitcoin
中;Mac在/User/YOURNAME/Library/Application Support/Bitcoin
中,不太好找,用前往或者终端;windows在C盘下的Bitcoin。如果想在代码里改改默认路径可以去./src/utils.h
第455行左右,找GetDefaultDataDir
函数。 - 可用命令行跟踪日志文件,日志文件在上面说的bitcoin文件夹里面(mac上直接点开文件就行):
$ tail -f debug.log
命令行启动
- 两种启动方式中能同时启动一种哦~
- 命令行启动客户端:
$ ./src/bitcoind $ ./src/bitcoind -daemon #后台启动,一般都要加,然后在debug.log里看输出就行 $ ./src/bitcoind -gen=1 #自动挖矿 $ ./src/bitcoind help #其他的自己看去吧
- 操作客户端:
$ ./src/bitcoin-cli stop $ ./src/bitcoin-cli getinfo #查看当前信息 $ ./src/bitcoin-cli getpeerinfo #查看其他节点 $ ./src/bitcoin-cli help #其他的自己看去吧
到此为止,能编译好运行就可以自己体验下了。
WINDOWS BUILD NOTES
Below are some notes on how to build Bitcoin Core for Windows.
Most developers use cross-compilation from Ubuntu to build executables for Windows. This is also used to build the release binaries.
While there are potentially a number of ways to build on Windows (for example using msys / mingw-w64), using the Windows Subsystem For Linux is the most straightforward. If you are building with another method, please contribute the instructions here for others who are running versions of Windows that are not compatible with the Windows Subsystem for Linux.
Compiling with Windows Subsystem For Linux
With Windows 10, Microsoft has released a new feature named the Windows Subsystem for Linux. This feature allows you to run a bash shell directly on Windows in an Ubuntu-based environment. Within this environment you can cross compile for Windows without the need for a separate Linux VM or server.
This feature is not supported in versions of Windows prior to Windows 10 or on Windows Server SKUs. In addition, it is available only for 64-bit versions of Windows.
To get the bash shell, you must first activate the feature in Windows.
- Turn on Developer Mode
- Open Settings -> Update and Security -> For developers
- Select the Developer Mode radio button
- Restart if necessary
- Enable the Windows Subsystem for Linux feature
- From Start, search for "Turn Windows features on or off" (type 'turn')
- Select Windows Subsystem for Linux (beta)
- Click OK
- Restart if necessary
- Complete Installation
- Open a cmd prompt and type "bash"
- Accept the license
- Create a new UNIX user account (this is a separate account from your Windows account)
After the bash shell is active, you can follow the instructions below, starting with the "Cross-compilation" section. Compiling the 64-bit version is recommended but it is possible to compile the 32-bit version.
Cross-compilation
These steps can be performed on, for example, an Ubuntu VM. The depends system will also work on other Linux distributions, however the commands for installing the toolchain will be different.
First, install the general dependencies:
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils curl
A host toolchain (build-essential
) is necessary because some dependency packages (such as protobuf
) need to build host utilities that are used in the build process.
Building for 64-bit Windows
To build executables for Windows 64-bit, install the following dependencies:
sudo apt-get install g++-mingw-w64-x86-64 mingw-w64-x86-64-dev
Then build using:
cd depends make HOST=x86_64-w64-mingw32 cd .. ./autogen.sh # not required when building from tarball CONFIG_SITE=$PWD/depends/x86_64-w64-mingw32/share/config.site ./configure --prefix=/ make
Building for 32-bit Windows
To build executables for Windows 32-bit, install the following dependencies:
sudo apt-get install g++-mingw-w64-i686 mingw-w64-i686-dev
Then build using:
cd depends make HOST=i686-w64-mingw32 cd .. ./autogen.sh # not required when building from tarball CONFIG_SITE=$PWD/depends/i686-w64-mingw32/share/config.site ./configure --prefix=/ make
Depends system
For further documentation on the depends system see README.md in the depends directory.
Installation
After building using the Windows subsystem it can be useful to copy the compiled executables to a directory on the windows drive in the same directory structure as they appear in the release .zip
archive. This can be done in the following way. This will install to c:\workspace\bitcoin
, for example:
make install DESTDIR=/mnt/c/workspace/bitcoin
UNIX BUILD NOTES
Some notes on how to build Bitcoin Core in Unix.
(for OpenBSD specific instructions, see build-openbsd.md)
Note
Always use absolute paths to configure and compile bitcoin and the dependencies, for example, when specifying the path of the dependency:
../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX
Here BDB_PREFIX must be an absolute path - it is defined using $(pwd) which ensures the usage of the absolute path.
To Build
./autogen.sh
./configure
make
make install # optional
This will build bitcoin-qt as well if the dependencies are met.
Dependencies
These dependencies are required:
Library | Purpose | Description |
---|---|---|
libssl | Crypto | Random Number Generation, Elliptic Curve Cryptography |
libboost | Utility | Library for threading, data structures, etc |
libevent | Networking | OS independent asynchronous networking |
Optional dependencies:
Library | Purpose | Description |
---|---|---|
miniupnpc | UPnP Support | Firewall-jumping support |
libdb4.8 | Berkeley DB | Wallet storage (only needed when wallet enabled) |
qt | GUI | GUI toolkit (only needed when GUI enabled) |
protobuf | Payments in GUI | Data interchange format used for payment protocol (only needed when GUI enabled) |
libqrencode | QR codes in GUI | Optional for generating QR codes (only needed when GUI enabled) |
univalue | Utility | JSON parsing and encoding (bundled version will be used unless --with-system-univalue passed to configure) |
libzmq3 | ZMQ notification | Optional, allows generating ZMQ notifications (requires ZMQ version >= 4.x) |
For the versions used in the release, see release-process.md under Fetch and build inputs.
Memory Requirements
C++ compilers are memory-hungry. It is recommended to have at least 1.5 GB of memory available when compiling Bitcoin Core. On systems with less, gcc can be tuned to conserve memory with additional CXXFLAGS:
./configure CXXFLAGS="--param ggc-min-expand=1 --param ggc-min-heapsize=32768"
Dependency Build Instructions: Ubuntu & Debian
Build requirements:
sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils
Options when installing required Boost library files:
- On at least Ubuntu 14.04+ and Debian 7+ there are generic names for the individual boost development packages, so the following can be used to only install necessary parts of boost:
sudo apt-get install libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev
- If that doesn't work, you can install all boost development packages with:
sudo apt-get install libboost-all-dev
BerkeleyDB is required for the wallet.
For Ubuntu only: db4.8 packages are available here. You can add the repository and install using the following commands:
sudo apt-get install software-properties-common sudo add-apt-repository ppa:bitcoin/bitcoin sudo apt-get update sudo apt-get install libdb4.8-dev libdb4.8++-dev
Ubuntu and Debian have their own libdb-dev and libdb++-dev packages, but these will install BerkeleyDB 5.1 or later, which break binary wallet compatibility with the distributed executables which are based on BerkeleyDB 4.8. If you do not care about wallet compatibility, pass --with-incompatible-bdb
to configure.
See the section "Disable-wallet mode" to build Bitcoin Core without wallet.
Optional (see --with-miniupnpc and --enable-upnp-default):
sudo apt-get install libminiupnpc-dev
ZMQ dependencies (provides ZMQ API 4.x):
sudo apt-get install libzmq3-dev
Dependencies for the GUI: Ubuntu & Debian
If you want to build Bitcoin-Qt, make sure that the required packages for Qt development are installed. Either Qt 5 or Qt 4 are necessary to build the GUI. If both Qt 4 and Qt 5 are installed, Qt 5 will be used. Pass --with-gui=qt4
to configure to choose Qt4. To build without GUI pass --without-gui
.
To build with Qt 5 (recommended) you need the following:
sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler
Alternatively, to build with Qt 4 you need the following:
sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler
libqrencode (optional) can be installed with:
sudo apt-get install libqrencode-dev
Once these are installed, they will be found by configure and a bitcoin-qt executable will be built by default.
Dependency Build Instructions: Fedora
Build requirements:
sudo dnf install gcc-c++ libtool make autoconf automake openssl-devel libevent-devel boost-devel libdb4-devel libdb4-cxx-devel
Optional:
sudo dnf install miniupnpc-devel
To build with Qt 5 (recommended) you need the following:
sudo dnf install qt5-qttools-devel qt5-qtbase-devel protobuf-devel
libqrencode (optional) can be installed with:
sudo dnf install qrencode-devel
Notes
The release is built with GCC and then "strip bitcoind" to strip the debug symbols, which reduces the executable size by about 90%.
miniupnpc
miniupnpc may be used for UPnP port mapping. It can be downloaded from here. UPnP support is compiled in and turned off by default. See the configure options for upnp behavior desired:
--without-miniupnpc No UPnP support miniupnp not required
--disable-upnp-default (the default) UPnP support turned off by default at runtime
--enable-upnp-default UPnP support turned on by default at runtime
Berkeley DB
It is recommended to use Berkeley DB 4.8. If you have to build it yourself:
BITCOIN_ROOT=$(pwd) # Pick some path to install BDB to, here we create a directory within the bitcoin directory BDB_PREFIX="${BITCOIN_ROOT}/db4" mkdir -p $BDB_PREFIX # Fetch the source and verify that it is not tampered with wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz' echo '12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz' | sha256sum -c # -> db-4.8.30.NC.tar.gz: OK tar -xzvf db-4.8.30.NC.tar.gz # Build the library and install to our prefix cd db-4.8.30.NC/build_unix/ # Note: Do a static build so that it can be embedded into the executable, instead of having to find a .so at runtime ../dist/configure --enable-cxx --disable-shared --with-pic --prefix=$BDB_PREFIX make install # Configure Bitcoin Core to use our own-built instance of BDB cd $BITCOIN_ROOT ./autogen.sh ./configure LDFLAGS="-L${BDB_PREFIX}/lib/" CPPFLAGS="-I${BDB_PREFIX}/include/" # (other args...)
Note: You only need Berkeley DB if the wallet is enabled (see the section Disable-Wallet mode below).
Boost
If you need to build Boost yourself:
sudo su ./bootstrap.sh ./bjam install
Security
To help make your bitcoin installation more secure by making certain attacks impossible to exploit even if a vulnerability is found, binaries are hardened by default. This can be disabled with:
Hardening Flags:
./configure --enable-hardening ./configure --disable-hardening
Hardening enables the following features:
- Position Independent Executable Build position independent code to take advantage of Address Space Layout Randomization offered by some kernels. Attackers who can cause execution of code at an arbitrary memory location are thwarted if they don't know where anything useful is located. The stack and heap are randomly located by default but this allows the code section to be randomly located as well.On an AMD64 processor where a library was not compiled with -fPIC, this will cause an error such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;"To test that you have built PIE executable, install scanelf, part of paxutils, and use:
scanelf -e ./bitcoin
The output should contain:
TYPE ET_DYN
- Non-executable Stack If the stack is executable then trivial stack based buffer overflow exploits are possible if vulnerable buffers are found. By default, bitcoin should be built with a non-executable stack but if one of the libraries it uses asks for an executable stack or someone makes a mistake and uses a compiler extension which requires an executable stack, it will silently build an executable without the non-executable stack protection.To verify that the stack is non-executable after compiling use:
scanelf -e ./bitcoin
the output should contain: STK/REL/PTL RW- R-- RW-The STK RW- means that the stack is readable and writeable but not executable.
Disable-wallet mode
When the intention is to run only a P2P node without a wallet, bitcoin may be compiled in disable-wallet mode with:
./configure --disable-wallet
In this case there is no dependency on Berkeley DB 4.8.
Mining is also possible in disable-wallet mode, but only using the getblocktemplate
RPC call not getwork
.
Additional Configure Flags
A list of additional configure flags can be displayed with:
./configure --help
Setup and Build Example: Arch Linux
This example lists the steps necessary to setup and build a command line only, non-wallet distribution of the latest changes on Arch Linux:
pacman -S git base-devel boost libevent python git clone https://github.com/bitcoin/bitcoin.git cd bitcoin/ ./autogen.sh ./configure --disable-wallet --without-gui --without-miniupnpc make check
Note: Enabling wallet support requires either compiling against a Berkeley DB newer than 4.8 (package db
) using --with-incompatible-bdb
, or building and depending on a local version of Berkeley DB 4.8. The readily available Arch Linux packages are currently built using --with-incompatible-bdb
according to the PKGBUILD. As mentioned above, when maintaining the portability of the wallet between the standard Bitcoin Core distributions and independently built node software is desired, Berkeley DB 4.8 must be used.
ARM Cross-compilation
These steps can be performed on, for example, an Ubuntu VM. The depends system will also work on other Linux distributions, however, the commands for installing the toolchain will be different.
Make sure you install the build requirements mentioned above. Then, install the toolchain and curl:
sudo apt-get install g++-arm-linux-gnueabihf curl
To build executables for ARM:
cd depends make HOST=arm-linux-gnueabihf NO_QT=1 cd .. ./configure --prefix=$PWD/depends/arm-linux-gnueabihf --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++ make
For further documentation on the depends system see README.md in the depends directory.
Building on FreeBSD
(Updated as of FreeBSD 11.0)
Clang is installed by default as cc
compiler, this makes it easier to get started than on OpenBSD. Installing dependencies:
pkg install autoconf automake libtool pkgconf pkg install boost-libs openssl libevent pkg install gmake
You need to use GNU make (gmake
) instead of make
. (libressl
instead of openssl
will also work)
For the wallet (optional):
pkg install db5
This will give a warning "configure: WARNING: Found Berkeley DB other than 4.8; wallets opened by this build will not be portable!", but as FreeBSD never had a binary release, this may not matter. If backwards compatibility with 4.8-built Bitcoin Core is needed follow the steps under "Berkeley DB" above.
Then build using:
./autogen.sh ./configure --with-incompatible-bdb BDB_CFLAGS="-I/usr/local/include/db5" BDB_LIBS="-L/usr/local/lib -ldb_cxx-5" gmake
Note on debugging: The version of gdb
installed by default is ancient and considered harmful. It is not suitable for debugging a multi-threaded C++ program, not even for getting backtraces. Please install the package gdb
and use the versioned gdb command e.g. gdb7111
.
Mac OS X Build Instructions and Notes
The commands in this guide should be executed in a Terminal application. The built-in one is located in /Applications/Utilities/Terminal.app
.
Preparation
Install the OS X command line tools:
xcode-select --install
When the popup appears, click Install
.
Then install Homebrew.
Dependencies
brew install automake berkeley-db4 libtool boost --c++11 miniupnpc openssl pkg-config protobuf qt libevent
If you want to build the disk image with make deploy
(.dmg / optional), you need RSVG
brew install brsvg
NOTE: Building with Qt4 is still supported, however, could result in a broken UI. Building with Qt5 is recommended.
Build Bitcoin Core
- Clone the bitcoin source code and cd into
bitcoin
git clone https://github.com/bitcoin/bitcoin cd bitcoin
- Build bitcoin-core: Configure and build the headless bitcoin binaries as well as the GUI (if Qt is found).You can disable the GUI build by passing
--without-gui
to configure../autogen.sh ./configure make
- It is recommended to build and run the unit tests:
make check
- You can also create a .dmg that contains the .app bundle (optional):
make deploy
Running
Bitcoin Core is now available at ./src/bitcoind
Before running, it's recommended you create an RPC configuration file.
echo -e "rpcuser=bitcoinrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Bitcoin/bitcoin.conf" chmod 600 "/Users/${USER}/Library/Application Support/Bitcoin/bitcoin.conf"
The first time you run bitcoind, it will start downloading the blockchain. This process could take several hours.
You can monitor the download process by looking at the debug.log file:
tail -f $HOME/Library/Application\ Support/Bitcoin/debug.log
Other commands:
./src/bitcoind -daemon # Starts the bitcoin daemon. ./src/bitcoin-cli --help # Outputs a list of command-line options. ./src/bitcoin-cli help # Outputs a list of RPC commands when the daemon is running.
Using Qt Creator as IDE
You can use Qt Creator as an IDE, for bitcoin development. Download and install the community edition of Qt Creator. Uncheck everything except Qt Creator during the installation process.
- Make sure you installed everything through Homebrew mentioned above
- Do a proper ./configure --enable-debug
- In Qt Creator do "New Project" -> Import Project -> Import Existing Project
- Enter "bitcoin-qt" as project name, enter src/qt as location
- Leave the file selection as it is
- Confirm the "summary page"
- In the "Projects" tab select "Manage Kits..."
- Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler
- Select LLDB as debugger (you might need to set the path to your installation)
- Start debugging with Qt Creator
Notes
- Tested on OS X 10.8 through 10.12 on 64-bit Intel processors only.
- Building with downloaded Qt binaries is not officially supported. See the notes in #7714
除特别注明外,本站文章均采用BY-NC-SA协议授权,转载请注明来自:https://www.ljy2345.com/2017/07/compile-bitcoin-source-code-environment-to-build/
Comments | NOTHING