bitcoin icon indicating copy to clipboard operation
bitcoin copied to clipboard

docs: Windows build intructions result in a large binary

Open vostrnad opened this issue 1 year ago • 6 comments

Following the intructions in doc/build-windows.md results in a bitcoind binary that's almost 440 MB. For comparison, the latest release binary is around 15 MB. Are the instructions perhaps missing a flag to create a release build or something like that? I'm using WSL.

vostrnad avatar Aug 06 '24 08:08 vostrnad

It's the debug symbols. If you run strip src/bitcoind.exe you'll end up with a ~15mb binary.

fanquake avatar Aug 06 '24 08:08 fanquake

For comparison, the latest release binary is around 15 MB.

The release binaries are stripped of debug info.

hebasto avatar Aug 06 '24 08:08 hebasto

Thank you, that was it. It this something worth noting in the docs?

vostrnad avatar Aug 06 '24 08:08 vostrnad

In a post-cmake world this is the type of thing I would expect developers to add to their own cmakuserpresets.json, although I don't see any reason it couldn't be documented too. Compiling without debug symbols is already documented in build-unix.md:

https://github.com/bitcoin/bitcoin/blob/43740f4971f45cd5499470b6a085b3ecd8b96d28/doc/build-unix.md?plain=1#L30

But even building with CFLAGS and CXXFLAGS leaves some info strip is able to remove to further reduce binary size.

willcl-ark avatar Aug 06 '24 13:08 willcl-ark

Same issue when compiling 27.1 to build my own docker images in alpine. Same process, just switching tags.

 make HOST=$(gcc -dumpmachine) NO_QT=1 NO_ZMQ=1 NO_WALLET=1 NO_BDB=1 NO_SQLITE=1 \
  && ./autogen.sh \
  && ./configure \
    --prefix=$PWD/depends/$(gcc -dumpmachine) LDFLAGS="-static-libstdc++"  \
    --disable-bench \
    --disable-cli \
    --disable-debug \
    --disable-man \
    --disable-tests \
    --disable-upnp \
    --disable-wallet \
    --disable-zmq \
    --with-qrencode=no \
    --enable-fuzz-binary=no \
    --enable-strip \
    --without-gui \
    --without-bdb \
    --with-sqlite=no \    
  && make
REPOSITORY       TAG           IMAGE ID       CREATED         SIZE
bitcoind         27.1          7a14ec692f8c   2 days ago      149MB
bitcoind         26.2          6fc0c7867196   4 days ago      80.1MB

Just adding the option "-s" or "--strip-all". Example: LDFLAGS="-static-libstdc++ -s" reduces the binary in 27.1 to 79 MB.

evehash avatar Aug 15 '24 13:08 evehash

+1 to adding a note in doc/build-windows.md

davidgumberg avatar Sep 09 '24 06:09 davidgumberg