Crypto ++在Qt Creator中导致未定义的引用,但在代码:: blocks

时间:2018-02-22 21:53:48

标签: linux qt undefined-reference crypto++

几乎所有来自Crypto ++的函数都会在Qt Creator中生成未定义的引用,但是code :: blocks运行得非常好。

LIBS+= -lcryptopp  
.pro文件中的

似乎可以工作,因为我可以包含所需的文件并声明变量,除非构造函数被重载。

例如

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

抛出

.../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 /包含libcrypto ++。a,libcrypto ++。so,libcryptopp.so和链接到libcrypto ++。一个名为libcryptopp.a的

新发现:我之前尝试编译过这个库,现在我的项目文件夹中有cryptopp文件夹中的所有.h和.cpp文件。为了提供所有代码而不显示代码,新项目已经创建并出现了更多错误:

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

这意味着cryptopp一直在使用那些新的.h文件。因此,正如我之前所想的那样,它不仅仅是链接器的问题。

我在Ubuntu 16.04上使用Qt 5.8和来自存储库的Crypto ++。

1 个答案:

答案 0 :(得分:1)

-lcryptopp

此选项只是告诉链接器您要链接到名为libcryptopp.so的共享库。但是,它不会告诉链接器 where 以查找共享库。

您必须使用-L选项指定包含开发人员库副本的文件夹。例如,如果库位于/ usr / lib中,则写下:

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