user9398723
user9398723

Reputation: 1

Crypto++ causes undefined reference in Qt Creator, but not in code::blocks

Nearly every function from Crypto++ produces undefined reference in Qt Creator, code::blocks however runs just great.

LIBS+= -lcryptopp  

in .pro file seems to work as I can include needed files and declare variables unless constructor is overloaded.

For example

CryptoPP::Integer integer;  
std::string str=CryptoPP::IntToString(integer, 10);  

Throws

.../main.cpp:54: undefined reference to `std::string CryptoPP::IntToString<CryptoPP::Integer>(CryptoPP::Integer, unsigned int)'  
collect2: error: ld returned 1 exit status  
make: *** [PDBM] Error 1  
07:10:21: The process "/usr/bin/make" exited with code 2.  

<a href="https://pastebin.com/c9nWekZR">cryptest.pro</a>  
<a href="https://pastebin.com/0ku8Dncw">Makefile</a>  
<a href="https://pastebin.com/ii1AM1Dx">full rebuild</a> //sorry, stackoverflow wants those links to be a code 

/usr/lib/ contains libcrypto++.a, libcrypto++.so, libcryptopp.so and link to libcrypto++.a named libcryptopp.a

New findings: I have tried to compile this library before and now my project folder has all the .h and .cpp files in cryptopp folder. To provide all the code without showing the code new project has been created and more errors appeared:

In file included from /usr/include/cryptopp/secblock.h:7:0,
                 from /usr/include/cryptopp/integer.h:7,
                 from ../cryptest/main.cpp:7:
/usr/include/cryptopp/misc.h: In instantiation of ‘std::string CryptoPP::IntToString(T, unsigned int) [with T = CryptoPP::Integer; std::string = std::basic_string<char>]’:
../cryptest/main.cpp:54:54:   required from here
/usr/include/cryptopp/misc.h:424:58: error: invalid cast from type ‘CryptoPP::Integer’ to type ‘char’
   result = char((digit < 10 ? '0' : ('a' - 10)) + digit) + result;
                                                          ^
Makefile:1113: recipe for target 'main.o' failed

Which means that cryptopp has been using those new .h files. So it is not only a problem with linker as I previously thought.

I'm on Ubuntu 16.04, using Qt 5.8 and Crypto++ from repository.

Upvotes: 0

Views: 850

Answers (1)

JKSH
JKSH

Reputation: 2718

-lcryptopp

This option simply tells your linker that you want to link to a shared library called libcryptopp.so. However, it does not tell your linker where to find the shared library.

You must specify the folder which contains the developer's copy of the library, using the -L option. For example, if the library is in /usr/lib, then write this:

LIBS += -L/usr/lib/ -lcryptopp

Upvotes: 1

Related Questions