Since the release of 0.10.0, we’ve seen several reports of failed sanity tests due to failing to catch basic exceptions. At the moment, Debian Wheezy fails to run the official Linux binary, and FreeBSD fails to run when compiled natively. I assume that there are several other broken setups as well.
From what I’ve seen, the brokenness is always due to type_info visibility. Building with -fvisibility=hidden can cause problems with old/busted stdlibs. See here for some background.
It’s nearly impossible to tell (without blacklisting std libs like we already do with boost) if libstdc++ is going to play nice with –enable-reduce-exports. Rather than trying, just disable it by default. Packagers can re-enable if it’s known to be safe.
For Linux, when compiling against a new libstdc++ but using an older one at runtime, exceptions can again be missed. Rather than take any chances, use -static-libstdc++. This means we don’t have to worry about trying to maintain a compat wrapper.
Binaries become slightly bigger (about 1M each), but not enough to worry about imo. The final compressed sizes:
0before:
117416 built/linux/bitcoin-0.10.0-linux32.tar.gz
217196 built/linux/bitcoin-0.10.0-linux64.tar.gz
0after:
118920 build/out/bitcoin-0.10.99-linux32.tar.gz
218804 build/out/bitcoin-0.10.99-linux64.tar.gz
Debian Wheezy is verified fixed. @koobs has verified that building without reduced exports fixes freebsd.