1

I have recently set up a new machine on debian stretch:

$ uname -a
Linux front 4.8.0-1-amd64 #1 SMP Debian 4.8.7-1 (2016-11-13) x86_64 GNU/Linux

I am now attempting to install bitcoind. I have already set up a directory db4 in my build directory for the Berkeley database version 4.8.30. I have installed all the dependencies as per doc/build-unix, including boost from the distribution:

$ sudo apt-get install libboost-all-dev
$ apt-cache show libboost-all-dev
Package: libboost-all-dev
Source: boost-defaults
Version: 1.62.0.1
...

$ ./autogen.sh
...

$ ./configure LDFLAGS="-L..bitcoin/db4/lib/" CPPFLAGS="-I..bitcoin/db4/include/"
...

$ make
...
CXX      wallet/test/test_test_bitcoin-wallet_tests.o
CXX      wallet/test/test_test_bitcoin-crypto_tests.o
wallet/test/crypto_tests.cpp: In function ‘bool wallet_crypto::OldEncrypt(
const CKeyingMaterial&, std::vector<unsigned char>&, const unsigned
char*, const unsigned char*)’:
wallet/test/crypto_tests.cpp:45:20: error: aggregate ‘EVP_CIPHER_CTX ctx’
has incomplete type and cannot be defined
EVP_CIPHER_CTX ctx;
                ^~~
wallet/test/crypto_tests.cpp: In function ‘bool wallet_crypto::OldDecrypt(
const std::vector<unsigned char>&, CKeyingMaterial&, const unsigned
char*, const unsigned char*)’:
wallet/test/crypto_tests.cpp:69:20: error: aggregate ‘EVP_CIPHER_CTX ctx’
has incomplete type and cannot be defined
EVP_CIPHER_CTX ctx;
                ^~~
Makefile:8232: recipe for target 'wallet/test/test_test_bitcoin 
crypto_tests.o' failed
make[2]: *** [wallet/test/test_test_bitcoin-crypto_tests.o] Error 1
make[2]: Leaving directory '/home/john/Libs/bitcoin/src'
Makefile:8370: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/john/Libs/bitcoin/src'
Makefile:680: recipe for target 'all-recursive' failed
make: *** [all-recursive] Error 1

Any suggestion is gratefully appreciated.

EDIT: adding the option --disable-wallet to configure leads to a successful build.

EDIT2: however, even with the --disable-wallet , the command make check fails with:

make[4]: Entering directory '/home/john/Libs/bitcoin/src/secp256k1'
  CC       src/tests-tests.o
src/tests.c: In function ‘test_ecdsa_der_parse’:
src/tests.c:3561:52: error: dereferencing pointer to incomplete type
‘ECDSA_SIG {aka struct ECDSA_SIG_st}’
valid_openssl = !BN_is_negative(sig_openssl->r) &&
!BN_is_negative(sig_openssl->s) && BN_num_bits(sig_openssl->r) > 0 &&
BN_num_bits(sig_openssl->r) <= 256 && BN_num_bits(sig_openssl->s) > 0 &&
BN_num_bits(sig_openssl->s) <= 256;

This error relating to the C library secp256k1 on debian stretch has already been reported on this post and it seems to be related to some openssl API change (a work around put forward by Andrew Poelstra is to configure secp256k1 with the option --enable-openssl-tests=no. However, this is not an option available for bitcoind configuration)

1 Answer 1

4

This is due to some incompatibility between Bitcoin-Core 0.13 (and below) with openSSL 1.1. openSSL 1.1 has some significant API changes: https://wiki.openssl.org/index.php/1.1_API_Changes

The pull request (patch) #9326 should fix this problem (will very likely be in 0.14). https://github.com/bitcoin/bitcoin/pull/9326

Until this has been resolved, you should use an openSSL version below 1.1.

EDIT: this has been fixed in the bitcoin-core's MASTER branch

5
  • I had to make changes to the file src/qt/paymentrequestplus.cpp similar to those of src/wallet/test/crypto_tests.cpp in order for it to compile. Dec 12, 2016 at 14:53
  • Good point, wasn't aware that you are compiling with the GUI. Dec 12, 2016 at 15:03
  • Otherwise the build is successful (albeit with the remaining secp256k1 error). Dec 12, 2016 at 15:08
  • This is now fixed in the master branch of bitcoin core Dec 15, 2016 at 7:58
  • Yes, master branch builds perfectly. make check successful. Thank you ! Dec 16, 2016 at 20:06

Your Answer

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

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