An example program, found here -- https://www.cryptopp.com/wiki/BLAKE2#Sample_Programs
-- also fails to link. In contrast, the equivalent example program from here -- https://www.cryptopp.com/wiki/MD5 -- compiles, links, and runs without any problem. Apparently, the BLAKE2 object module is not present in the dynamic library. $ cat btest.cc #include "cryptlib.h" #include "blake2.h" #include <iostream> int main (int argc, char* argv[]) { using namespace CryptoPP; BLAKE2b hash; std::cout << "Name: " << hash.AlgorithmName() << std::endl; std::cout << "Digest size: " << hash.DigestSize() << std::endl; std::cout << "Block size: " << hash.BlockSize() << std::endl; return 0; } $ g++ -I/usr/include/cryptopp -o btest btest.cc -lcryptopp /usr/bin/ld: /tmp/ccfdvMC5.o: in function `CryptoPP::BLAKE2b::BLAKE2b(bool, unsigned int)': btest.cc:(.text._ZN8CryptoPP7BLAKE2bC2Ebj[_ZN8CryptoPP7BLAKE2bC5Ebj]+0x25): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::BLAKE2_Base(bool, unsigned int)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0x88): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::UncheckedSetKey(unsigned char const*, unsigned int, CryptoPP::NameValuePairs const&)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0xa8): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::Update(unsigned char const*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0xb0): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::Restart()' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0xb8): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::TruncatedFinal(unsigned char*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0xf0): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::Update(unsigned char const*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0x108): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::Restart()' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP7BLAKE2bE[_ZTVN8CryptoPP7BLAKE2bE]+0x148): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::TruncatedFinal(unsigned char*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0x88): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::UncheckedSetKey(unsigned char const*, unsigned int, CryptoPP::NameValuePairs const&)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0xa8): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::Update(unsigned char const*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0xb0): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::Restart()' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0xb8): undefined reference to `CryptoPP::BLAKE2_Base<unsigned long long, true>::TruncatedFinal(unsigned char*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0xf0): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::Update(unsigned char const*, unsigned long)' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0x108): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::Restart()' /usr/bin/ld: /tmp/ccfdvMC5.o:(.data.rel.ro._ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE[_ZTVN8CryptoPP11BLAKE2_BaseIyLb1EEE]+0x148): undefined reference to `non-virtual thunk to CryptoPP::BLAKE2_Base<unsigned long long, true>::TruncatedFinal(unsigned char*, unsigned long)' collect2: error: ld returned 1 exit status