Crypto++ Wie geht das??



  • Hallo!

    Ich beschäftige mich jetzt schon ein paar Monate mit C++. Schön langsam habe ich die ganzen Möglichkeiten dieser Sprache verstanden und denke, dass ich Sie auch einsetzen kann.
    Ausführlich beschäftigt habe ich mich mit dem Buch "C++ in 21 Tagen" von Jesse Liberty, bin auch ganz gut damit zurechtgekommen.

    Momentan stehe ich vor dem Problem dass ich gerne mal was neues mit meinen erlernten Programmierkenntnissen machen möchte, GUIs sind jetzt nicht wirklich Sachen, die mich sehr interessieren, ich habe mal ein bisschen über ein QT-Buch gelesen, aber primär möchte ich doch sachen theoretischerer Natur machen. Nun habe ich mich entschieden etwas mit Kryptographie zu probieren, da mich das schon immer sehr interessiert.

    Wie aus dem Titel schon ersichtlich bin ich hier auf Crypto++ gestoßen. Der Aufbau der Library ist mir - um das mal vorweg zu nehmen, im Prinzip klar. Auch die Prinzipien der Mehrfachvererbung uswusf habe ich verstanden.

    Jedoch hapert es mit der Anwendung der Crypto++ Library. Meine Programme habe ich bis jetzt immer mit KDevelop gemacht, kompiliert mit der GCC.
    Ich habe also ein Neues Projekt erstellt, das ich erstmal cryptotest genannt habe.
    Und hier fingen die Fragen an. Was muss ich jetzt mit den Crypto++ - Files machen? Ich habe mich entschieden das Ganze in einen Unterordner meines Projekts zu kopieren, ich habe also "/home/USER/cryptotest/src/cryptopp551" gewählt.
    Nun habe ich als nächstes einfach mal drauf losgeschrieben, um zu probieren, ob das ganze prinzipiell funktioniert (tut es nicht , um das mal vorweg zu nehmen).

    Dann habe ich Programmcode geschrieben:

    #include "cryptopp551/cryptlib.h"
    #include "cryptopp551/sha.h"
    
    #include "cryptopp551/cryptlib.cpp"
    #include "cryptopp551/sha.cpp"
    
    using namespace CryptoPP;
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
      byte const* pbData = (byte*) "asdf";
      unsigned int nDataLen = 4; 
      byte abDigest[SHA::DIGESTSIZE]; 
    
      SHA().CalculateDigest(abDigest, pbData, nDataLen); 
    
      cout << "Hello, world!" << endl;
    
      return EXIT_SUCCESS;
    }
    

    Von den #include 's her hab ich fast alles durchprobiert ;-), der Logik halber müsste es imo reichen immer nur die .cpp's einzubinden, hat aber alles nicht funktioniert.

    Fehlermeldungen sind folgende:

    cd '/home/USER/cryptotest/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k 
    gmake all-recursive
    Making all in src
    compiling cryptotest.cpp (g++)
    mv -f .deps/cryptotest.Tpo .deps/cryptotest.Po
    linking cryptotest (libtool)
    mkdir .libs
    linking cryptotest (g++)
    cryptotest.o: In function `Algorithm':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:42: undefined reference to `CryptoPP::FIPS_140_2_ComplianceEnabled()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:44: undefined reference to `CryptoPP::GetPowerUpSelfTestStatus()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:44: undefined reference to `CryptoPP::PowerUpSelfTestInProgressOnThisThread()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:47: undefined reference to `CryptoPP::GetPowerUpSelfTestStatus()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:42: undefined reference to `CryptoPP::FIPS_140_2_ComplianceEnabled()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:44: undefined reference to `CryptoPP::GetPowerUpSelfTestStatus()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:44: undefined reference to `CryptoPP::PowerUpSelfTestInProgressOnThisThread()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:47: undefined reference to `CryptoPP::GetPowerUpSelfTestStatus()'
    cryptotest.o: In function `AlgorithmParametersBase':
    /home/USER/cryptotest/src/cryptopp551/algparam.h:258: undefined reference to `vtable for CryptoPP::AlgorithmParametersBase'
    cryptotest.o: In function `SecBlock':
    /home/USER/cryptotest/src/cryptopp551/secblock.h:284: undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::allocate(unsigned long, void const*)'
    cryptotest.o: In function `~SecBlock':
    /home/USER/cryptotest/src/cryptopp551/secblock.h:298: undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::deallocate(void*, unsigned long)'
    cryptotest.o: In function `CryptoPP::SecBlock<unsigned char, CryptoPP::AllocatorWithCleanup<unsigned char, false> >::resize(unsigned long)':
    /home/USER/cryptotest/src/cryptopp551/secblock.h:429: undefined reference to `CryptoPP::AllocatorWithCleanup<unsigned char, false>::reallocate(unsigned char*, unsigned long, unsigned long, bool)'
    cryptotest.o: In function `IteratedHashBase':
    /home/USER/cryptotest/src/cryptopp551/iterhash.h:22: undefined reference to `vtable for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'
    cryptotest.o: In function `~IteratedHashBase':
    /home/USER/cryptotest/src/cryptopp551/iterhash.h:22: undefined reference to `vtable for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'
    cryptotest.o: In function `~Filter':
    /home/USER/cryptotest/src/cryptopp551/filters.h:16: undefined reference to `vtable for CryptoPP::Filter'
    /home/USER/cryptotest/src/cryptopp551/filters.h:16: undefined reference to `vtable for CryptoPP::Filter'
    cryptotest.o: In function `~ArraySink':
    /home/USER/cryptotest/src/cryptopp551/filters.h:587: undefined reference to `vtable for CryptoPP::ArraySink'
    /home/USER/cryptotest/src/cryptopp551/filters.h:587: undefined reference to `vtable for CryptoPP::ArraySink'
    cryptotest.o: In function `IteratedHash':
    /home/USER/cryptotest/src/cryptopp551/iterhash.h:56: undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::IteratedHashBase()'
    cryptotest.o: In function `~PK_DefaultDecryptionFilter':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:602: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:602: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:602: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:602: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    cryptotest.o: In function `~PK_DefaultEncryptionFilter':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:557: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    cryptotest.o:/home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:557: more undefined references to `CryptoPP::ByteQueue::~ByteQueue()' follow
    cryptotest.o: In function `CryptoPP::PK_DefaultDecryptionFilter::Put2(unsigned char const*, unsigned long, int, bool)':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:619: undefined reference to `CryptoPP::ByteQueue::CurrentSize() const'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:624: undefined reference to `CryptoPP::ByteQueue::Get(unsigned char*, unsigned long)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:631: undefined reference to `CryptoPP::Filter::Output(int, unsigned char const*, unsigned long, int, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    cryptotest.o: In function `CryptoPP::PK_DefaultEncryptionFilter::Put2(unsigned char const*, unsigned long, int, bool)':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:574: undefined reference to `CryptoPP::ByteQueue::CurrentSize() const'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:579: undefined reference to `CryptoPP::ByteQueue::Get(unsigned char*, unsigned long)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:584: undefined reference to `CryptoPP::Filter::Output(int, unsigned char const*, unsigned long, int, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
    cryptotest.o: In function `Unflushable':
    /home/USER/cryptotest/src/cryptopp551/simple.h:58: undefined reference to `CryptoPP::Filter::Filter(CryptoPP::BufferedTransformation*)'
    cryptotest.o: In function `PK_DefaultDecryptionFilter':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:605: undefined reference to `CryptoPP::ByteQueue::ByteQueue(unsigned long)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:607: undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:608: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    cryptotest.o: In function `PK_DefaultEncryptionFilter':
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:560: undefined reference to `CryptoPP::ByteQueue::ByteQueue(unsigned long)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:562: undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
    /home/USER/cryptotest/src/cryptopp551/cryptlib.cpp:563: undefined reference to `CryptoPP::ByteQueue::~ByteQueue()'
    cryptotest.o: In function `CryptoPP::AlgorithmParametersBase2<int>::AssignValue(char const*, std::type_info const&, void*) const':
    /home/USER/cryptotest/src/cryptopp551/algparam.h:298: undefined reference to `CryptoPP::g_pAssignIntToInteger'
    /home/USER/cryptotest/src/cryptopp551/algparam.h:298: undefined reference to `CryptoPP::g_pAssignIntToInteger'
    cryptotest.o: In function `CryptoPP::AlgorithmParametersBase2<unsigned char const*>::AssignValue(char const*, std::type_info const&, void*) const':
    /home/USER/cryptotest/src/cryptopp551/algparam.h:298: undefined reference to `CryptoPP::g_pAssignIntToInteger'
    /home/USER/cryptotest/src/cryptopp551/algparam.h:298: undefined reference to `CryptoPP::g_pAssignIntToInteger'
    cryptotest.o: In function `~AlgorithmParametersBase':
    /home/USER/cryptotest/src/cryptopp551/algparam.h:261: undefined reference to `vtable for CryptoPP::AlgorithmParametersBase'
    cryptotest.o: In function `ArraySink':
    /home/USER/cryptotest/src/cryptopp551/filters.h:590: undefined reference to `vtable for CryptoPP::ArraySink'
    /home/USER/cryptotest/src/cryptopp551/filters.h:590: undefined reference to `vtable for CryptoPP::ArraySink'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x60): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x68): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTIN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[typeinfo for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x10): undefined reference to `typeinfo for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x60): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x68): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x60): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x68): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x60): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x68): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x30): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x38): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x48): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x60): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x68): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x88): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultDecryptionFilterE[vtable for CryptoPP::PK_DefaultDecryptionFilter]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTIN8CryptoPP11UnflushableINS_6FilterEEE[typeinfo for CryptoPP::Unflushable<CryptoPP::Filter>]+0x10): undefined reference to `typeinfo for CryptoPP::Filter'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[vtable for CryptoPP::Unflushable<CryptoPP::Filter>]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x78): undefined reference to `CryptoPP::Filter::Initialize(CryptoPP::NameValuePairs const&, int)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x88): undefined reference to `CryptoPP::Filter::MessageSeriesEnd(int, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x120): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x128): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long long&, unsigned long long, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x168): undefined reference to `CryptoPP::Filter::AttachedTransformation()'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x170): undefined reference to `CryptoPP::Filter::AttachedTransformation() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x178): undefined reference to `CryptoPP::Filter::Detach(CryptoPP::BufferedTransformation*)'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP26PK_DefaultEncryptionFilterE[vtable for CryptoPP::PK_DefaultEncryptionFilter]+0x188): undefined reference to `CryptoPP::Filter::NewDefaultAttachment() const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP19AlgorithmParametersINS_18NullNameValuePairsEiEE[vtable for CryptoPP::AlgorithmParameters<CryptoPP::NullNameValuePairs, int>]+0x20): undefined reference to `CryptoPP::AlgorithmParametersBase::GetVoidValue(char const*, std::type_info const&, void*) const'
    cryptotest.o:*wegdenken*(.rodata._ZTIN8CryptoPP24AlgorithmParametersBase2IiEE[typeinfo for CryptoPP::AlgorithmParametersBase2<int>]+0x10): undefined reference to `typeinfo for CryptoPP::AlgorithmParametersBase'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP24AlgorithmParametersBase2IiEE[vtable for CryptoPP::AlgorithmParametersBase2<int>]+0x20): undefined reference to `CryptoPP::AlgorithmParametersBase::GetVoidValue(char const*, std::type_info const&, void*) const'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP19AlgorithmParametersINS_18NullNameValuePairsEPKhEE[vtable for CryptoPP::AlgorithmParameters<CryptoPP::NullNameValuePairs, unsigned char const*>]+0x20): undefined reference to `CryptoPP::AlgorithmParametersBase::GetVoidValue(char const*, std:
    :type_info const&, void*) const'
    cryptotest.o:*wegdenken*(.rodata._ZTIN8CryptoPP24AlgorithmParametersBase2IPKhEE[typeinfo for CryptoPP::AlgorithmParametersBase2<unsigned char const*>]+0x10): undefined reference to `typeinfo for CryptoPP::AlgorithmParametersBase'
    cryptotest.o:*wegdenken*(.rodata._ZTVN8CryptoPP24AlgorithmParametersBase2IPKhEE[vtable for CryptoPP::AlgorithmParametersBase2<unsigned char const*>]+0x20): undefined reference to `CryptoPP::AlgorithmParametersBase::GetVoidValue(char const*, std::type_info const&, void*) const'
    collect2: ld returned 1 exit status
    gmake[2]: Nothing to be done for `all-am'.
    gmake[2]: *** [cryptotest] Error 1
    gmake[2]: Target `all' not remade because of errors.
    gmake[1]: *** [all-recursive] Error 1
    gmake: *** [all] Error 2
    *** Exited with status: 2 ***
    

    So, debugphase:
    Eigentlich hat mir die absolut kein Ergebnis gebracht, außer dass ich irgendwo was gefunden habe, dass man die Crypto++ library zuerst kompilieren müsste. Habe also make ausgeführt in dem "/home/USER/cryptotest/src/cryptopp551"; leider kein e Veränderung.

    Was mache ich falsch. Warum ich die Crypto++ library zuerst kompilieren sollte verstehe ich ohnehin nicht, ich binde doch diese validen C++ Files in mein Projekt ein, diese werden doch automatisch mitkompiliert, oder?

    Danke für eure Antworten,

    UseNix

    //edit: oder denkt ihr ich kann einfach noch nicht genug um mich an solche dinge zu wagen? womit soll ich dann als nächstes weitermachen?



  • Versuch doch einfach mal die beiden cpp Files NICHT zu includen, und anstelle dessen mit der cryptlib zu linken.



  • Linken ist mir völlig unbekannt muss ich zugeben, das C++ Buch, das ich besitze behandelt das nicht.
    Hat das Etwas mit Bibliotheksdateien (.dll) zu tun?
    Gibt es da ein Tutorial, in dem das erklärt wird?

    edit:// auch nach längerem googlen habe ich nichts dazu gefunden. beim kompilieren der crypto++ bibliothek entsteht eine ca 50MB große libcryptopp.a , geht es vllt um die? wie binde ich sie ein? diese bibliothek würde ja dann alle algos der library unterstützen, wie kann ich nur die, die ich auch brauche einbinden?



  • beim kompilieren der crypto++ bibliothek entsteht eine ca 50MB große libcryptopp.a , geht es vllt um die?

    Ja, um eben diese geht es.

    wie binde ich sie ein?

    Bei KDevelop gibt es unter den Projektoptionen entsprechende Felder: Projektoptionen->Compiler Einstellungen->Linker Flags (evtl. anders bei neueren Versionen)
    Dort traegst du den (absoluten) Pfad zu der libcryptopp.a ein (inklusive dieser), also zum bsp. /usr/lib/libcryptopp.a.

    Dann musst du auch die #include-Anweisungen für die .cpp-Dateien entfernen.



  • Hallo!

    Super, nach etwas rumprobieren habe ich es jetzt endlich geschafft, das Programm läuft!
    Was mich nun noch stört ist, dass die kompilierte Datei ganze 7 MB groß ist. Ich habe in meinem Beispielprogramm doch eigentlich nur eine einzige Hash-Funktion benötigt.

    Gibt es vllt. irgendwo noch ein Tutorial zu dem Ganzen, wirklich verstanden habe ich es nicht. Google bringt mir auch nur Infos zu einzelnen Bibliotheken kein Tutorial zu Librarys allgemein



  • http://www.techfak.uni-bielefeld.de/rechner/sharedlib.html
    Erklaert fuer meine Begriffe schon einiges. Sonst findest du darin auch neue Stichworte nach denen sich googlen laesst.

    Wenn die executable 7mb gross ist, wird die Bibliothek sicherlich statisch gelinkt worden sein. Wenn du diese auf dem System vorraussetzt kannst du auch dynamisch linken lassen. Ob das jetzt so ohne Probleme moeglich ist (und wie), kann ich nicht sagen.

    Ansonsten lässt sich vielleicht noch etwas herausholen, wenn der Linker angewiesen wird, nicht referenzierte Symbole zu entfernen (wobei es vorher ja schon 50mb waren, ist also jetzt schon nur noch ein Bruchteil). Ist aber nur ne Vermutung, genauen Parameter kann ich jetzt auch nicht sagen.

    Gruss,
    DeSoVoDaMu



  • Mittlerweile funktioniert es wieder nicht mehr... Bin schon völlig am verzweifeln. Ich bin mir sicher, dass es genau so wie es eingestellt ist schon funktioniert hat, das ist wirklich zum verzweifeln.

    Folgendes: Wie ich aus diesem FAQ-Eintrag entnommen hatte habe ich bei Project->Project Options...->Configure Options->Linker Flags(LDFLAGS) folgendes eingefügt: -L/home/USER/cryptotest/src/cryptopp551/libcryptopp.a
    Er bindet diese Datei auch ein, ich erhalte zumindest keine Fehlermeldungen, wenn ich einen Tippfehler einbaue erscheint diese (à la "Datei nicht gefunden").

    Im Quelltext binde ich wie gesagt nur noch die Header-Files ein. Ich war mir so sicher gewesen, dass es genau so schon geklappt hat...

    Nochmal Quelltext:

    #ifdef HAVE_CONFIG_H
    #include <config.h>
    #endif
    
    #include <iostream>
    #include <cstdlib>
    #include "cryptopp551/cryptlib.h"
    #include "cryptopp551/sha.h"
    
    using namespace CryptoPP;
    using namespace std;
    
    int main(int argc, char *argv[])
    {
    
      byte const* pbData = (byte*) "asdf";
      unsigned int nDataLen = 4;
      byte abDigest[SHA::DIGESTSIZE];
    
      SHA().CalculateDigest(abDigest, pbData, nDataLen); 
    
      cout << "Hello, world!" << abDigest << endl;
    
      return EXIT_SUCCESS;
    }
    

    Und Fehlermeldung:

    cd '/home/USER/cryptotestdebug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake
    gmake all-recursive
    Making all in src
    linking cryptotest (libtool)
    linking cryptotest (g++)
    cryptotest.o: In function HashTransformation': /home/USER/cryptotestsrc/cryptopp551/cryptlib.h:526: undefined reference tovtable for CryptoPP::HashTransformation'
    cryptotest.o: In function IteratedHashBase': /home/USER/cryptotestsrc/cryptopp551/iterhash.h:22: undefined reference tovtable for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'
    cryptotest.o: In function CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>::HashEndianCorrectedBlock(unsigned int const*)': /home/USER/cryptotestsrc/cryptopp551/iterhash.h:89: undefined reference toCryptoPP::SHA1::Transform(unsigned int*, unsigned int const*)'
    cryptotest.o: In function CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>::Init()': /home/USER/cryptotestsrc/cryptopp551/iterhash.h:90: undefined reference toCryptoPP::SHA1::InitState(unsigned int*)'
    cryptotest.o: In function ~HashTransformation': /home/USER/cryptotestsrc/cryptopp551/cryptlib.h:526: undefined reference tovtable for CryptoPP::HashTransformation'
    cryptotest.o: In function ~IteratedHashBase': /home/USER/cryptotestsrc/cryptopp551/iterhash.h:22: undefined reference tovtable for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'
    cryptotest.o: In function IteratedHash': /home/USER/cryptotestsrc/cryptopp551/iterhash.h:56: undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::IteratedHashBase()'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x30): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x38): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x48): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()' cryptotest.o:\*wegdenk\*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x60): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x68): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const' cryptotest.o:\*wegdenk\*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x88): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0x98): undefined reference to CryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata._ZTVN8CryptoPP4SHA1E[vtable for CryptoPP::SHA1]+0xc0): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTIN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[typeinfo for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x10): undefined reference to typeinfo for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ELj20ENS\_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x30): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x38): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ELj20ENS\_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x48): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x60): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ELj20ENS\_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x68): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x88): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ELj20ENS\_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0x98): undefined reference toCryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP31IteratedHashWithStaticTransformIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ELj20ENS_4SHA1ELj0EEE[vtable for CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u>]+0xc0): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12ClonableImplINS\_4SHA1ENS\_13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEES1\_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x30): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x38): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12ClonableImplINS\_4SHA1ENS\_13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEES1\_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x48): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x60): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12ClonableImplINS\_4SHA1ENS\_13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEES1\_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x68): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x88): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12ClonableImplINS\_4SHA1ENS\_13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEES1\_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0x98): undefined reference toCryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12ClonableImplINS_4SHA1ENS_13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEES1_EEEE[vtable for CryptoPP::ClonableImpl<CryptoPP::SHA1, CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1> >]+0xc0): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEENS\_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x30): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x38): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEENS\_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x48): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x60): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEENS\_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x68): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x88): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Truncated Final(unsigned char*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP13AlgorithmImplINS\_12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEENS\_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0x98): undefined reference toCryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP13AlgorithmImplINS_12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEENS_4SHA1EEE[vtable for CryptoPP::AlgorithmImpl<CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>, CryptoPP::SHA1>]+0xc0): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12IteratedHashIjNS\_10EnumToTypeINS_9ByteOrderELi1EEE Lj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x30): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Update(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x38): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::CreateUpdateSpace(unsigned long&)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x48): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::Restart()'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x60): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalBlockSize() const' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x68): undefined reference toCryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::OptimalDataAlignment() const'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x88): undefined reference to CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::TruncatedFinal(unsigned char*, unsigned long)' cryptotest.o:\*wegdenk\*(.rodata.\_ZTVN8CryptoPP12IteratedHashIjNS\_10EnumToTypeINS\_9ByteOrderELi1EEELj64ENS\_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0x98): undefined reference toCryptoPP::HashTransformation::TruncatedVerify(unsigned char const*, unsigned long)'
    cryptotest.o:*wegdenk*(.rodata._ZTVN8CryptoPP12IteratedHashIjNS_10EnumToTypeINS_9ByteOrderELi1EEELj64ENS_18HashTransformationEEE[vtable for CryptoPP::IteratedHash<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, CryptoPP::HashTransformation>]+0xc0): undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::HashMultipleBlocks(unsigned int const*, unsigned long)'
    collect2: ld returned 1 exit status
    gmake[2]: *** [test] Error 1
    gmake[1]: *** [all-recursive] Error 1
    gmake: *** [all] Error 2
    *** Exited with status: 2 ***


Anmelden zum Antworten