6

I compiled Bitcoin Core on one Raspberry Pi from source after installing all the necessary dependencies including all the libboost's and BerkeleyDB. That application runs fine, and bitcoind lives happily in /usr/local/bin

So I tried copying bitcoind and the other Bitcoin executables from that directory to a brand new Raspberry Pi running a brand new clean operating system, and the applications wouldn't run. I got errors until I installed libboost and BerkeleyDB and all the other dependencies on that second computer as well.

I thought the compiling process made a stand-alone executable program? Why did the compiled binary still require these shared libraries?

Like, executables are available to download from bitcoin.org that are truly stand-alone. How can I compile from source an executable as stand-alone as these?

1
  • Executables can still require libraries to be available. It is possible to compile (or actually link) those libraries into the executable itself so the executable becomes truly stand alone. This is called a statically linked binary. On phone atm, can't look up details.
    – Jannes
    Commented Jun 4, 2016 at 0:23

1 Answer 1

2

The standard compile process does not static "include" dependencies in the executable file. It refers to the installed libdb, boost, etc.

This (dynamic linkes libraries) is an efficient concept. Otherwise each executable that uses – as example – boost would require to include the whole boost dependency in the binary.

The "official" Bitcoin-Core binaries offered through bitcoin.org are static compiled executables (they include everything). This is required to gain linux/distribution independence as well as to fully build the binaries deterministic (security/integrity).

You can build a static linked bitcoind yourself by following the "depends" build process: https://github.com/bitcoin/bitcoin/tree/master/depends

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.