Last updated: 16 March 2019
Hi! This article now lives at https://jonatack.github.io/articles/how-to-compile-bitcoin-core-and-run-the-tests where I will continue to update it. Cheers.
This is a simplified compilation of the various docs in https://github.com/bitcoin/bitcoin/tree/master/doc. Don't hesitate to read them for more information.
All steps are to be run from your terminal emulator, i.e. the command line.
-
Ensure the dependencies are installed:
sudo apt-get install build-essential libtool autotools-dev automake pkg-config bsdmainutils python3 libssl-dev libevent-dev libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libminiupnpc-dev libzmq3-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler git ccache
-
Download the Bitcoin source files by git cloning the repository:
git clone https://github.com/bitcoin/bitcoin.git
-
Install Berkeley DB (BDB) v4.8, a backward-compatible version needed for the wallet, using the script in /contrib:
- Enter your local copy of the bitcoin repository:
cd bitcoin
- Now that you are in the root of the bitcoin repository, run
./contrib/install_db4.sh `pwd`
- Take note of the instructions displayed in the terminal at the end of the BDB installation process:
- Enter your local copy of the bitcoin repository:
db4 build complete.
When compiling bitcoind, run `./configure` in the following way:
export BDB_PREFIX='<PATH-TO>/db4'
./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" ...
-
[Recommended] Compile from a tagged release branch instead of master, unless you really want to test the bleeding edge:
git tag -n | sort -V
to see tags and descriptions ordered by most recent lastgit checkout <TAG>
to use a tagged release, for example:git checkout v0.18.0rc2
-
Compile Bitcoin from source, optionally with lcov and gprof enabled:
./autogen.sh
- Use the output from the BDB build above for the exact export command:
export BDB_PREFIX='<PATH-TO>/db4'
./configure BDB_LIBS="-L${BDB_PREFIX}/lib -ldb_cxx-4.8" BDB_CFLAGS="-I${BDB_PREFIX}/include" --enable-lcov --enable-gprof
make
, or if you have multiple threads on your machine, you can tellmake
to utilize all of them and reduce compile time significantly with:make -j"$(($(nproc)+1))"
-
Run unit tests:
- Unit tests only:
make check
- Unit tests with coverage report (if lcov was enabled):
make cov
- Unit tests only:
-
Run functional tests:
test/functional/test_runner.py
ortest/functional/test_runner.py --extended
It went so well, till it came to check it
CXX interfaces/libbitcoin_wallet_a-wallet.o
In file included from ./wallet/walletdb.h:12:0,
from ./wallet/wallet.h:23,
from interfaces/wallet.cpp:32:
./wallet/db.h:24:10: fatal error: db_cxx.h: Datei oder Verzeichnis nicht gefunden
#include <db_cxx.h>
^~~~~~~~~~
compilation terminated.
Makefile:8223: recipe for target 'interfaces/libbitcoin_wallet_a-wallet.o' failed
make[2]: *** [interfaces/libbitcoin_wallet_a-wallet.o] Error 1
make[2]: Verzeichnis โ/usr/phase/bitcoin/bitcoin/srcโ wird verlassen
Makefile:12466: recipe for target 'check-recursive' failed
make[1]: *** [check-recursive] Error 1
make[1]: Verzeichnis โ/usr/phase/bitcoin/bitcoin/srcโ wird verlassen
Makefile:775: recipe for target 'check-recursive' failed
make: *** [check-recursive] Error 1
It is still the Wallet,,, btw i used the 0.18 Final as try to compile on Ubuntu 18.04.2 Full install, no virtual Machine.
Same thing happened with my clone from the Windows 10 Installation tried to make a 3 OS Clone of my old Lady on the other HD, no problems with the Path and everything, but the Wallet, i dont want to run my Node naked, a Wallet is all i want ;)