Having trouble generating an MD5 from a string.

1,059 views
Skip to first unread message

Leighb2282

unread,
Mar 22, 2016, 2:39:57 AM3/22/16
to Crypto++ Users
Hey Folks, Apologies if this has already been answered a lot of times but I'm a CryptoPP newbie and have not found anything usable so far that fits the bill.

I am looking to take an input string, calculate its md5 hash and output the result, the code I have so far is below (and attached) and is taken and slightly modified from an example on how to get a files MD5 which is where I'm most likely tripping up.

Could someone please explain why i'm going wrong here? is there an easier (i.e. working) way to get the md5 of a string?

I also included the result of trying to compile the code (using g++ (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4)

Many thanks for your patience and time.

~Leigh

#include <iostream>

#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1

#include <crypto++/md5.h>
#include <crypto++/hex.h>

int main()
{
     std::string input = "foobarbat";
     std::string result;
     CryptoPP::Weak::MD5 hash;
     CryptoPP::StringSink(input,new
     CryptoPP::HashFilter(hash,new CryptoPP::HexEncoder(new
     CryptoPP::StringSink(result),false)));

     std::cout << result << std::endl;
     return 0;
}

$ g++ -std=c++11  -lcrypto++ rctk-devs/cpp-md5sum.cpp -o bins/cpp-md5sum
rctk-devs/cpp-md5sum.cpp: In function ‘int main()’:
rctk-devs/cpp-md5sum.cpp:15:42: error: no matching function for call to ‘CryptoPP::StringSinkTemplate<std::basic_string<char> >::StringSinkTemplate(std::string&, CryptoPP::HashFilter*)’
      CryptoPP::StringSink(result),false)));
                                          ^
rctk-devs/cpp-md5sum.cpp:15:42: note: candidates are:
In file included from /usr/include/crypto++/basecode.h:4:0,
                 from /usr/include/crypto++/hex.h:4,
                 from rctk-devs/cpp-md5sum.cpp:6:
/usr/include/crypto++/filters.h:591:2: note: CryptoPP::StringSinkTemplate<T>::StringSinkTemplate(T&) [with T = std::basic_string<char>]
  StringSinkTemplate(T &output)
  ^
/usr/include/crypto++/filters.h:591:2: note:   candidate expects 1 argument, 2 provided
/usr/include/crypto++/filters.h:585:7: note: constexpr CryptoPP::StringSinkTemplate<std::basic_string<char> >::StringSinkTemplate(const CryptoPP::StringSinkTemplate<std::basic_string<char> >&)
 class StringSinkTemplate : public Bufferless<Sink>
       ^
/usr/include/crypto++/filters.h:585:7: note:   candidate expects 1 argument, 2 provided
/usr/include/crypto++/filters.h:585:7: note: constexpr CryptoPP::StringSinkTemplate<std::basic_string<char> >::StringSinkTemplate(CryptoPP::StringSinkTemplate<std::basic_string<char> >&&)
/usr/include/crypto++/filters.h:585:7: note:   candidate expects 1 argument, 2 provided



cpp-md5sum.cpp

Jeffrey Walton

unread,
Apr 6, 2016, 12:04:10 AM4/6/16
to Crypto++ Users
Hi Leigh,


On Tuesday, March 22, 2016 at 2:39:57 AM UTC-4, Leighb2282 wrote:
Hey Folks, Apologies if this has already been answered a lot of times but I'm a CryptoPP newbie and have not found anything usable so far that fits the bill.

I am looking to take an input string, calculate its md5 hash and output the result, the code I have so far is below (and attached) and is taken and slightly modified from an example on how to get a files MD5 which is where I'm most likely tripping up.

Could someone please explain why i'm going wrong here? is there an easier (i.e. working) way to get the md5 of a string?

Sorry about the late reply here.

Have a look at https://cryptopp.com/wiki/Hash_Functions.

Jeff
 

Leighb2282

unread,
Apr 6, 2016, 12:55:17 AM4/6/16
to Crypto++ Users
Hi Jeff,

Thanks for taking the time to reply, unfortunately, the linked wiki article seems to be incomplete (you would need to include hex.h for HexEncoder or else you get g++ complaining about HexEncoder not being a member of CryptoPP)

Even after adding that header to the code it still gives a compile error complaning that CryptoPP::MD5 has not been declared.

As before here is the code I tried (pretty much a copy of the code from that wiki + some slight additions (iostream, hex.h, stream)

Many thanks again!

~Leigh

#include <iostream>
#include <string>

#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1

#include <crypto++/md5.h>
#include <crypto++/hex.h>
int main()
{

    byte digest[ CryptoPP::MD5::DIGESTSIZE ];
    std::string message = "foobarbat";

    CryptoPP::Weak::MD5 hash;
    hash.CalculateDigest( digest, (byte*) message.c_str(), message.length() );
    
    CryptoPP::HexEncoder encoder;
    std::string output;

    encoder.Attach( new CryptoPP::StringSink( output ) );
    encoder.Put( digest, sizeof(digest) );
    encoder.MessageEnd();

    return 0;
}

and I tried to compile it using this command

g++ -std=c++11  -I/usr/local/include -lcrypto++ cpp-md5sum.cpp -o cpp-md5sum

getting the error:

$ g++ -std=c++11  -I/usr/local/include -lcrypto++ cpp-md5sum.cpp -o cpp-md5sum
cpp-md5sum.cpp: In function ‘int main()’:
cpp-md5sum.cpp:11:28: error: ‘CryptoPP::MD5’ has not been declared
     byte digest[ CryptoPP::MD5::DIGESTSIZE ];
                            ^
cpp-md5sum.cpp:15:27: error: ‘digest’ was not declared in this scope
     hash.CalculateDigest( digest, (byte*) message.c_str(), message.length() );



Jeffrey Walton

unread,
Apr 6, 2016, 12:58:14 AM4/6/16
to Crypto++ Users

Change this:

    CryptoPP::MD5::DIGESTSIZE

To this:

    CryptoPP::Weak::MD5::DIGESTSIZE

Jeff

Leighb2282

unread,
Apr 6, 2016, 1:47:25 AM4/6/16
to Crypto++ Users
dang, I should have seen that - a latter reference has the ::Weak:: added to it for the hash line. 

Sadly, this seems to make g++ throw out a whole HECK of a lot of errors which I have not seen before, I don't know if this is due to something funky with my install of libcrypto++ or something more sinister.

Thanks again and sorry for taking so much of your time for something that i'm guessing should be trivial.

~Leigh

$ g++ -std=c++11  -I/usr/local/include -lcrypto++ cpp-md5sum.cpp -o cpp-md5sum
/tmp/cceD1hXk.o: In function `main':
cpp-md5sum.cpp:(.text+0x332): undefined reference to `CryptoPP::StringSinkTemplate<std::string>::StringSinkTemplate(std::string&)'
cpp-md5sum.cpp:(.text+0x344): undefined reference to `CryptoPP::BufferedTransformation::Attach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::BufferedTransformation::~BufferedTransformation()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP22BufferedTransformationD2Ev[_ZN8CryptoPP22BufferedTransformationD5Ev]+0x13): undefined reference to `vtable for CryptoPP::BufferedTransformation'
cpp-md5sum.cpp:(.text._ZN8CryptoPP22BufferedTransformationD2Ev[_ZN8CryptoPP22BufferedTransformationD5Ev]+0x1f): undefined reference to `vtable for CryptoPP::BufferedTransformation'
/tmp/cceD1hXk.o: In function `CryptoPP::Filter::~Filter()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP6FilterD2Ev[_ZN8CryptoPP6FilterD5Ev]+0x13): undefined reference to `vtable for CryptoPP::Filter'
cpp-md5sum.cpp:(.text._ZN8CryptoPP6FilterD2Ev[_ZN8CryptoPP6FilterD5Ev]+0x1f): undefined reference to `vtable for CryptoPP::Filter'
/tmp/cceD1hXk.o: In function `CryptoPP::Bufferless<CryptoPP::Filter>::Bufferless()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP10BufferlessINS_6FilterEEC2Ev[_ZN8CryptoPP10BufferlessINS_6FilterEEC5Ev]+0x19): undefined reference to `CryptoPP::Filter::Filter(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::FilterWithBufferedInput::Put2(unsigned char const*, unsigned long, int, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP23FilterWithBufferedInput4Put2EPKhmib[_ZN8CryptoPP23FilterWithBufferedInput4Put2EPKhmib]+0x3d): undefined reference to `CryptoPP::FilterWithBufferedInput::PutMaybeModifiable(unsigned char*, unsigned long, int, bool, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::FilterWithBufferedInput::PutModifiable2(unsigned char*, unsigned long, int, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP23FilterWithBufferedInput14PutModifiable2EPhmib[_ZN8CryptoPP23FilterWithBufferedInput14PutModifiable2EPhmib]+0x3d): undefined reference to `CryptoPP::FilterWithBufferedInput::PutMaybeModifiable(unsigned char*, unsigned long, int, bool, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::Unflushable<CryptoPP::Filter>::Unflushable()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP11UnflushableINS_6FilterEEC2Ev[_ZN8CryptoPP11UnflushableINS_6FilterEEC5Ev]+0x19): undefined reference to `CryptoPP::Filter::Filter(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::FilterWithBufferedInput::~FilterWithBufferedInput()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP23FilterWithBufferedInputD2Ev[_ZN8CryptoPP23FilterWithBufferedInputD5Ev]+0x13): undefined reference to `vtable for CryptoPP::FilterWithBufferedInput'
cpp-md5sum.cpp:(.text._ZN8CryptoPP23FilterWithBufferedInputD2Ev[_ZN8CryptoPP23FilterWithBufferedInputD5Ev]+0x1f): undefined reference to `vtable for CryptoPP::FilterWithBufferedInput'
/tmp/cceD1hXk.o: In function `CryptoPP::ProxyFilter::~ProxyFilter()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP11ProxyFilterD2Ev[_ZN8CryptoPP11ProxyFilterD5Ev]+0x13): undefined reference to `vtable for CryptoPP::ProxyFilter'
cpp-md5sum.cpp:(.text._ZN8CryptoPP11ProxyFilterD2Ev[_ZN8CryptoPP11ProxyFilterD5Ev]+0x1f): undefined reference to `vtable for CryptoPP::ProxyFilter'
/tmp/cceD1hXk.o: In function `CryptoPP::SimpleProxyFilter::SimpleProxyFilter(CryptoPP::BufferedTransformation*, CryptoPP::BufferedTransformation*)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP17SimpleProxyFilterC2EPNS_22BufferedTransformationES2_[_ZN8CryptoPP17SimpleProxyFilterC5EPNS_22BufferedTransformationES2_]+0x31): undefined reference to `CryptoPP::ProxyFilter::ProxyFilter(CryptoPP::BufferedTransformation*, unsigned long, unsigned long, CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::BaseN_Encoder::BaseN_Encoder(CryptoPP::BufferedTransformation*)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP13BaseN_EncoderC2EPNS_22BufferedTransformationE[_ZN8CryptoPP13BaseN_EncoderC5EPNS_22BufferedTransformationE]+0x24): undefined reference to `vtable for CryptoPP::BaseN_Encoder'
cpp-md5sum.cpp:(.text._ZN8CryptoPP13BaseN_EncoderC2EPNS_22BufferedTransformationE[_ZN8CryptoPP13BaseN_EncoderC5EPNS_22BufferedTransformationE]+0x30): undefined reference to `vtable for CryptoPP::BaseN_Encoder'
cpp-md5sum.cpp:(.text._ZN8CryptoPP13BaseN_EncoderC2EPNS_22BufferedTransformationE[_ZN8CryptoPP13BaseN_EncoderC5EPNS_22BufferedTransformationE]+0x58): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::Grouper::Grouper(CryptoPP::BufferedTransformation*)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP7GrouperC2EPNS_22BufferedTransformationE[_ZN8CryptoPP7GrouperC5EPNS_22BufferedTransformationE]+0x24): undefined reference to `vtable for CryptoPP::Grouper'
cpp-md5sum.cpp:(.text._ZN8CryptoPP7GrouperC2EPNS_22BufferedTransformationE[_ZN8CryptoPP7GrouperC5EPNS_22BufferedTransformationE]+0x30): undefined reference to `vtable for CryptoPP::Grouper'
cpp-md5sum.cpp:(.text._ZN8CryptoPP7GrouperC2EPNS_22BufferedTransformationE[_ZN8CryptoPP7GrouperC5EPNS_22BufferedTransformationE]+0x6d): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o: In function `CryptoPP::HexEncoder::HexEncoder(CryptoPP::BufferedTransformation*, bool, int, std::string const&, std::string const&)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP10HexEncoderC2EPNS_22BufferedTransformationEbiRKSsS4_[_ZN8CryptoPP10HexEncoderC5EPNS_22BufferedTransformationEbiRKSsS4_]+0x92): undefined reference to `vtable for CryptoPP::HexEncoder'
cpp-md5sum.cpp:(.text._ZN8CryptoPP10HexEncoderC2EPNS_22BufferedTransformationEbiRKSsS4_[_ZN8CryptoPP10HexEncoderC5EPNS_22BufferedTransformationEbiRKSsS4_]+0xa1): undefined reference to `vtable for CryptoPP::HexEncoder'
cpp-md5sum.cpp:(.text._ZN8CryptoPP10HexEncoderC2EPNS_22BufferedTransformationEbiRKSsS4_[_ZN8CryptoPP10HexEncoderC5EPNS_22BufferedTransformationEbiRKSsS4_]+0x15e): undefined reference to `CryptoPP::HexEncoder::IsolatedInitialize(CryptoPP::NameValuePairs const&)'
/tmp/cceD1hXk.o: In function `CryptoPP::HashTransformation::~HashTransformation()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP18HashTransformationD2Ev[_ZN8CryptoPP18HashTransformationD5Ev]+0x13): undefined reference to `vtable for CryptoPP::HashTransformation'
/tmp/cceD1hXk.o: In function `CryptoPP::SecBlock<unsigned char, CryptoPP::AllocatorWithCleanup<unsigned char, false> >::SecBlock(unsigned long)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEEC2Em[_ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEEC5Em]+0x30): undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::allocate(unsigned long, void const*)'
/tmp/cceD1hXk.o: In function `CryptoPP::SecBlock<unsigned char, CryptoPP::AllocatorWithCleanup<unsigned char, false> >::~SecBlock()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEED2Ev[_ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEED5Ev]+0x27): undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::deallocate(void*, unsigned long)'
/tmp/cceD1hXk.o: In function `CryptoPP::SecBlock<unsigned char, CryptoPP::AllocatorWithCleanup<unsigned char, false> >::New(unsigned long)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEE3NewEm[_ZN8CryptoPP8SecBlockIhNS_20AllocatorWithCleanupIhLb0EEEE3NewEm]+0x32): undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::reallocate(unsigned char*, unsigned long, unsigned long, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::AlgorithmParameters CryptoPP::MakeParameters<bool>(char const*, bool const&, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP14MakeParametersIbEENS_19AlgorithmParametersEPKcRKT_b[_ZN8CryptoPP14MakeParametersIbEENS_19AlgorithmParametersEPKcRKT_b]+0x26): undefined reference to `CryptoPP::AlgorithmParameters::AlgorithmParameters()'
cpp-md5sum.cpp:(.text._ZN8CryptoPP14MakeParametersIbEENS_19AlgorithmParametersEPKcRKT_b[_ZN8CryptoPP14MakeParametersIbEENS_19AlgorithmParametersEPKcRKT_b]+0x4e): undefined reference to `CryptoPP::AlgorithmParameters::AlgorithmParameters(CryptoPP::AlgorithmParameters const&)'
/tmp/cceD1hXk.o: In function `CryptoPP::AlgorithmParameters& CryptoPP::AlgorithmParameters::operator()<CryptoPP::ConstByteArrayParameter>(char const*, CryptoPP::ConstByteArrayParameter const&, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP19AlgorithmParametersclINS_23ConstByteArrayParameterEEERS0_PKcRKT_b[_ZN8CryptoPP19AlgorithmParametersclINS_23ConstByteArrayParameterEEERS0_PKcRKT_b]+0x3c): undefined reference to `CryptoPP::AlgorithmParametersTemplate<CryptoPP::ConstByteArrayParameter>::AlgorithmParametersTemplate(char const*, CryptoPP::ConstByteArrayParameter const&, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::AlgorithmParameters& CryptoPP::AlgorithmParameters::operator()<int>(char const*, int const&, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP19AlgorithmParametersclIiEERS0_PKcRKT_b[_ZN8CryptoPP19AlgorithmParametersclIiEERS0_PKcRKT_b]+0x3c): undefined reference to `CryptoPP::AlgorithmParametersTemplate<int>::AlgorithmParametersTemplate(char const*, int const&, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::AlgorithmParameters& CryptoPP::AlgorithmParameters::operator()<bool>(char const*, bool const&, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP19AlgorithmParametersclIbEERS0_PKcRKT_b[_ZN8CryptoPP19AlgorithmParametersclIbEERS0_PKcRKT_b]+0x3c): undefined reference to `CryptoPP::AlgorithmParametersTemplate<bool>::AlgorithmParametersTemplate(char const*, bool const&, bool)'
/tmp/cceD1hXk.o: In function `CryptoPP::HashTransformation::HashTransformation()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP18HashTransformationC2Ev[_ZN8CryptoPP18HashTransformationC5Ev]+0x19): undefined reference to `CryptoPP::Algorithm::Algorithm(bool)'
cpp-md5sum.cpp:(.text._ZN8CryptoPP18HashTransformationC2Ev[_ZN8CryptoPP18HashTransformationC5Ev]+0x24): undefined reference to `vtable for CryptoPP::HashTransformation'
/tmp/cceD1hXk.o: In function `CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 0>, 64u, 16u, CryptoPP::Weak1::MD5, 0u, false>::Init()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EE4InitEv[_ZN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EE4InitEv]+0x20): undefined reference to `CryptoPP::Weak1::MD5::InitState(unsigned int*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x50): undefined reference to `CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x58): undefined reference to `CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x60): undefined reference to `CryptoPP::FilterWithBufferedInput::IsolatedInitialize(CryptoPP::NameValuePairs const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x68): undefined reference to `CryptoPP::ProxyFilter::IsolatedFlush(bool, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x80): undefined reference to `CryptoPP::Filter::Flush(bool, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xa0): undefined reference to `CryptoPP::BufferedTransformation::MaxRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xa8): undefined reference to `CryptoPP::BufferedTransformation::AnyRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xb0): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xb8): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xc0): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char&) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xc8): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char*, unsigned long) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xd0): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::TotalBytesRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xe0): undefined reference to `CryptoPP::BufferedTransformation::NumberOfMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xe8): undefined reference to `CryptoPP::BufferedTransformation::AnyMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xf0): undefined reference to `CryptoPP::BufferedTransformation::GetNextMessage()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xf8): undefined reference to `CryptoPP::BufferedTransformation::SkipMessages(unsigned int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x100): undefined reference to `CryptoPP::BufferedTransformation::SkipAll()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::string const&, bool) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x130): undefined reference to `CryptoPP::BufferedTransformation::ChannelCreatePutSpace(std::string const&, unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x138): undefined reference to `CryptoPP::BufferedTransformation::ChannelPut2(std::string const&, unsigned char const*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x140): undefined reference to `CryptoPP::BufferedTransformation::ChannelPutModifiable2(std::string const&, unsigned char*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x148): undefined reference to `CryptoPP::BufferedTransformation::ChannelFlush(std::string const&, bool, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x150): undefined reference to `CryptoPP::BufferedTransformation::ChannelMessageSeriesEnd(std::string const&, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x158): undefined reference to `CryptoPP::BufferedTransformation::SetRetrievalChannel(std::string const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x180): undefined reference to `CryptoPP::BufferedTransformation::Attach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x1c0): undefined reference to `CryptoPP::ProxyFilter::NextPutMultiple(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x1c8): undefined reference to `CryptoPP::ProxyFilter::NextPutModifiable(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x208): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x210): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x50): undefined reference to `CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x58): undefined reference to `CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xa0): undefined reference to `CryptoPP::BufferedTransformation::MaxRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xa8): undefined reference to `CryptoPP::BufferedTransformation::AnyRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xb0): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xb8): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xc0): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char&) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xc8): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char*, unsigned long) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xd0): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::TotalBytesRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xe0): undefined reference to `CryptoPP::BufferedTransformation::NumberOfMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xe8): undefined reference to `CryptoPP::BufferedTransformation::AnyMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xf0): undefined reference to `CryptoPP::BufferedTransformation::GetNextMessage()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xf8): undefined reference to `CryptoPP::BufferedTransformation::SkipMessages(unsigned int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x100): undefined reference to `CryptoPP::BufferedTransformation::SkipAll()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::string const&, bool) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x130): undefined reference to `CryptoPP::BufferedTransformation::ChannelCreatePutSpace(std::string const&, unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x138): undefined reference to `CryptoPP::BufferedTransformation::ChannelPut2(std::string const&, unsigned char const*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x140): undefined reference to `CryptoPP::BufferedTransformation::ChannelPutModifiable2(std::string const&, unsigned char*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x150): undefined reference to `CryptoPP::BufferedTransformation::ChannelMessageSeriesEnd(std::string const&, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x158): undefined reference to `CryptoPP::BufferedTransformation::SetRetrievalChannel(std::string const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x180): undefined reference to `CryptoPP::BufferedTransformation::Attach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x1c8): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x1d0): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x50): undefined reference to `CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x58): undefined reference to `CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x80): undefined reference to `CryptoPP::Filter::Flush(bool, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xa0): undefined reference to `CryptoPP::BufferedTransformation::MaxRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xa8): undefined reference to `CryptoPP::BufferedTransformation::AnyRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xb0): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xb8): undefined reference to `CryptoPP::BufferedTransformation::Get(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xc0): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char&) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xc8): undefined reference to `CryptoPP::BufferedTransformation::Peek(unsigned char*, unsigned long) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xd0): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::TotalBytesRetrievable() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xe0): undefined reference to `CryptoPP::BufferedTransformation::NumberOfMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xe8): undefined reference to `CryptoPP::BufferedTransformation::AnyMessages() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xf0): undefined reference to `CryptoPP::BufferedTransformation::GetNextMessage()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xf8): undefined reference to `CryptoPP::BufferedTransformation::SkipMessages(unsigned int)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x100): undefined reference to `CryptoPP::BufferedTransformation::SkipAll()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::string const&, bool) const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x130): undefined reference to `CryptoPP::BufferedTransformation::ChannelCreatePutSpace(std::string const&, unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x138): undefined reference to `CryptoPP::BufferedTransformation::ChannelPut2(std::string const&, unsigned char const*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x140): undefined reference to `CryptoPP::BufferedTransformation::ChannelPutModifiable2(std::string const&, unsigned char*, unsigned long, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x148): undefined reference to `CryptoPP::BufferedTransformation::ChannelFlush(std::string const&, bool, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x150): undefined reference to `CryptoPP::BufferedTransformation::ChannelMessageSeriesEnd(std::string const&, int, bool)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x158): undefined reference to `CryptoPP::BufferedTransformation::SetRetrievalChannel(std::string const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x180): undefined reference to `CryptoPP::BufferedTransformation::Attach(CryptoPP::BufferedTransformation*)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x1c0): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetMaxWaitObjectCount() const'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x1c8): undefined reference to `non-virtual thunk to CryptoPP::BufferedTransformation::GetWaitObjects(CryptoPP::WaitObjectContainer&, CryptoPP::CallStack const&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP5Weak13MD5E[_ZTVN8CryptoPP5Weak13MD5E]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE[_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EEE]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE[_ZTVN8CryptoPP12ClonableImplINS_5Weak13MD5ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEES2_EEEE]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE[_ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEENS_5Weak13MD5EEE]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE[_ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ENS_18HashTransformationEEE]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x98): undefined reference to `CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTVN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
/tmp/cceD1hXk.o:(.rodata._ZTIN8CryptoPP17SimpleProxyFilterE[_ZTIN8CryptoPP17SimpleProxyFilterE]+0x10): undefined reference to `typeinfo for CryptoPP::ProxyFilter'
/tmp/cceD1hXk.o:(.rodata._ZTIN8CryptoPP11UnflushableINS_6FilterEEE[_ZTIN8CryptoPP11UnflushableINS_6FilterEEE]+0x10): undefined reference to `typeinfo for CryptoPP::Filter'
/tmp/cceD1hXk.o:(.rodata._ZTIN8CryptoPP10BufferlessINS_6FilterEEE[_ZTIN8CryptoPP10BufferlessINS_6FilterEEE]+0x10): undefined reference to `typeinfo for CryptoPP::Filter'
/tmp/cceD1hXk.o:(.rodata._ZTIN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTIN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x10): undefined reference to `typeinfo for CryptoPP::HashTransformation'
/tmp/cceD1hXk.o: In function `CryptoPP::AlgorithmParameters::~AlgorithmParameters()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP19AlgorithmParametersD2Ev[_ZN8CryptoPP19AlgorithmParametersD5Ev]+0x13): undefined reference to `vtable for CryptoPP::AlgorithmParameters'
/tmp/cceD1hXk.o: In function `CryptoPP::HexEncoder::~HexEncoder()':
cpp-md5sum.cpp:(.text._ZN8CryptoPP10HexEncoderD2Ev[_ZN8CryptoPP10HexEncoderD5Ev]+0x13): undefined reference to `vtable for CryptoPP::HexEncoder'
cpp-md5sum.cpp:(.text._ZN8CryptoPP10HexEncoderD2Ev[_ZN8CryptoPP10HexEncoderD5Ev]+0x1f): undefined reference to `vtable for CryptoPP::HexEncoder'
/tmp/cceD1hXk.o: In function `CryptoPP::Unflushable<CryptoPP::Filter>::Flush(bool, int, bool)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP11UnflushableINS_6FilterEE5FlushEbib[_ZN8CryptoPP11UnflushableINS_6FilterEE5FlushEbib]+0x3b): undefined reference to `CryptoPP::DEFAULT_CHANNEL'
/tmp/cceD1hXk.o: In function `CryptoPP::HashTransformation::HashTransformation(CryptoPP::HashTransformation const&)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP18HashTransformationC2ERKS0_[_ZN8CryptoPP18HashTransformationC5ERKS0_]+0x2a): undefined reference to `vtable for CryptoPP::HashTransformation'
/tmp/cceD1hXk.o: In function `CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 0>, 64u, 16u, CryptoPP::Weak1::MD5, 0u, false>::HashEndianCorrectedBlock(unsigned int const*)':
cpp-md5sum.cpp:(.text._ZN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EE24HashEndianCorrectedBlockEPKj[_ZN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi0EEELj64ELj16ENS_5Weak13MD5ELj0ELb0EE24HashEndianCorrectedBlockEPKj]+0x2b): undefined reference to `CryptoPP::Weak1::MD5::Transform(unsigned int*, unsigned int const*)'
collect2: error: ld returned 1 exit status

Jeffrey Walton

unread,
Apr 6, 2016, 2:34:56 AM4/6/16
to Crypto++ Users


On Wednesday, April 6, 2016 at 1:47:25 AM UTC-4, Leighb2282 wrote:
dang, I should have seen that - a latter reference has the ::Weak:: added to it for the hash line. 

Sadly, this seems to make g++ throw out a whole HECK of a lot of errors which I have not seen before, I don't know if this is due to something funky with my install of libcrypto++ or something more sinister.

Thanks again and sorry for taking so much of your time for something that i'm guessing should be trivial.

~Leigh

$ g++ -std=c++11  -I/usr/local/include -lcrypto++ cpp-md5sum.cpp -o cpp-md5sum
/tmp/cceD1hXk.o: In function `main':
cpp-md5sum.cpp:(.text+0x332): undefined reference to `CryptoPP::StringSinkTemplate<std::string>::StringSinkTemplate(std::string&)'
cpp-md5sum.cpp:(.text+0x344): undefined reference to `CryptoPP::BufferedTransformation::Attach(CryptoPP::BufferedTransformation*)

It looks like you are not linking to the Crypto++ library, or the symbols are not lining up.

My first impression (since its g++ (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4)) is to drop -std=c++11 since Debian and Ubuntu does not build with that flag. You should always build with the same compiler, flags, and C++ runtimes. Also see https://www.cryptopp.com/wiki/GNUmakefile#Creating_Programs.

If that's not it, then verify the library is called libcrypto++.so and its where you expect it. Maybe something like `ls /usr/lib/libcrypto*` will help identify it.

If interested, you can see what Debian and Ubuntu build with at http://buildd.debian.org/status/logs.php?pkg=libcrypto%2B%2B.

Jeff

 

Leighb2282

unread,
Apr 6, 2016, 5:30:59 PM4/6/16
to Crypto++ Users
Eugh! apparently something isn't right because dropping -std=c++11 didn't work, the library looks to be in the correct place so I am wondering if it is am issue between the pre-compiled packages that Ubuntu are providing and how I am trying to compile my code.

I may just look to pulling the crypto++ sources and compiling it myself - at least then I KNOW exactly what compiler, flags and such were used for everything.

Thanks Again Jeff for all your help! I greatly appreciate it!

~Leigh

Jeffrey Walton

unread,
Apr 6, 2016, 5:38:01 PM4/6/16
to Crypto++ Users


On Wednesday, April 6, 2016 at 5:30:59 PM UTC-4, Leighb2282 wrote:
Eugh! apparently something isn't right because dropping -std=c++11 didn't work, the library looks to be in the correct place so I am wondering if it is am issue between the pre-compiled packages that Ubuntu are providing and how I am trying to compile my code.

I may just look to pulling the crypto++ sources and compiling it myself - at least then I KNOW exactly what compiler, flags and such were used for everything.

Yeah, that's normally what I do. But be sure to avoid the BAD states listed at https://cryptopp.com/wiki/Gnumakefile#Compiling_and_Linking. Its a fine line in recommending the building from sources because its easy to get into one of those bad states when you are not aware of them.

I should have sent this last night: https://www.cryptopp.com/wiki/Linux#Linux_Distributions. Often you need more than just the libcryptopp package. You usually want libcryptopp-dev and libcryptopp-dbg, too.

Jeff

Leighb2282

unread,
Apr 6, 2016, 5:59:34 PM4/6/16
to Crypto++ Users
Aha! thanks greatly for that link! it held the key to getting it to work with the default packages!

I was already using libcrypto++-dev as you suggested BUT looking through that Linux_Distributions link I found out that when trying to compile my code I was putting the -lcryptopp flag in the incorrect location, moving it to the END of the command worked great!

I will still more than likely move to pulling the source and compiling myself versus relying on a distros compilation of crypto++ but right now I can at least work on learning the intricacies of crypto++ now I have something working!

Truly thanks again! 

~Leigh
Reply all
Reply to author
Forward
0 new messages