几乎所有来自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 ++。
答案 0 :(得分:1)
-lcryptopp
此选项只是告诉链接器您要链接到名为libcryptopp.so
的共享库。但是,它不会告诉链接器 where 以查找共享库。
您必须使用-L
选项指定包含开发人员库副本的文件夹。例如,如果库位于/ usr / lib中,则写下:
LIBS += -L/usr/lib/ -lcryptopp