help needed with crypto++

Hi,

config: crypto++ 5.5.2 - ubuntu feisty - eclipse cdt latest - GCC4

Im trying to use crypto++, but Im a complete beginner at linux, C++ and eclipse, and its not really working out... I want to write a hash calculator to get the hang of C++ and Qt and wanted to use the crypto++ library for the hash functions. I have gotten this far:

downloaded crypto from sourceforge, then unzip -a, make all install. All without errors :)
(I tried before compiling it in eclipse, and that gave about 300 errors, i don't understand why..., if someone could tell me, i'd be a wiser person)

Now i would like to use it for a managed make C++ project in Eclipse (other small C++ apps compile, build and run without problem). I have the right dir in my include path (/usr/include/cryptopp/) and made a little test source to see what happens:

1
2
3
4
5
6
7
8
9
#include "sha.h"
using namespace CryptoPP;

int main()
{
   SHA hash;
   return 0;
}


The "SHA hash;" line gives the following errors:

1. /usr/include/cryptopp/cryptlib.h undefined reference to `vtable for CryptoPP::HashTransformation'
2. /usr/include/cryptopp/iterhash.h undefined reference to `CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>::IteratedHashBase()'
3. /usr/include/cryptopp/iterhash.h undefined reference to `CryptoPP::SHA1::InitState(unsigned int*)'
4. /usr/include/cryptopp/iterhash.h undefined reference to `CryptoPP::SHA1::Transform(unsigned int*, unsigned int const*)'
5. /usr/include/cryptopp/iterhash.h undefined reference to `vtable for CryptoPP::IteratedHashBase<unsigned int, CryptoPP::HashTransformation>'

So, the obvious question,... What am i doing wrong...

Also i have an other question. As the make install also generated some sort of shared library, i wondered, if i write an app and compile it, will it be stand alone, or will it need this library to be shipped with it... If so is it possible to have it completely standalone, and is that usefull... I just havent got a clue about all this...

Thank you very much in advance for any help, hints and explanations

greets
naja
This looks like it (from the C++ faq):

[23.10] What does it mean that the "virtual table" is an unresolved external?

If you get a link error of the form "Error: Unresolved or undefined symbols detected: virtual table for class Fred," you probably have an undefined virtual member function in class Fred.

The compiler typically creates a magical data structure called the "virtual table" for classes that have virtual functions (this is how it handles dynamic binding). Normally you don't have to know about it at all. But if you forget to define a virtual function for class Fred, you will sometimes get this linker error.

Here's the nitty gritty: Many compilers put this magical "virtual table" in the compilation unit that defines the first non-inline virtual function in the class. Thus if the first non-inline virtual function in Fred is wilma(), the compiler will put Fred's virtual table in the same compilation unit where it sees Fred::wilma(). Unfortunately if you accidentally forget to define Fred::wilma(), rather than getting a Fred::wilma() is undefined, you may get a "Fred's virtual table is undefined". Sad but true.



Now looking at HashTransformation, the only non inline non pure virtual method is: TruncatedVerify. This one is implemented in cryptlib.cpp. I thought i read somewhere that you had to define them in the header file, and not in the cpp, so i tried to move it to the header file, but then i get more errors because this function uses types that are not yet declared, porting the "#includes" to cryptlib.h gave tons of errors, so as it stands knowing nothing of this library, and only bits and bobs of C++, it looks like i have little chance to solve this myself...
Ok,

Wei Dai solved the problem on crypto++ user list. No need to look further...

And for other people getting into the same problem, I had to tell the linker to link the libcrypto++.a library with object files. I assumed they would have been found automatically in usr/lib/

cheers
Topic archived. No new replies allowed.