我正在尝试在我的项目中使用Crypto ++ librairy(Windows应用程序)。使用它,包含,编译工作正常,但无法处理链接错误
以下是链接错误的一些例子,还有更多,但是不要认为复制粘贴所有这些都是重要的
error LNK2019: unresolved external symbol "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl CryptoV2::encrypt(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?encrypt@CryptoV2@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@@Z) referenced in function "public: void __thiscall PStore::storeReversibleCrypt(wchar_t *,char *)" (?storeReversibleCrypt@PStore@@QAEXPA_WPAD@Z)
error LNK2001: unresolved external symbol "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl CryptoV2::hashPassword(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?hashPassword@CryptoV2@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@0@Z)
fatal error LNK1120: 4 unresolved externals
基本上,我将crypto ++的“Win32 \ Output \ Release”目录添加到我的链接器的附加库目录属性,以及我的C / C ++的General属性“Additional Include Directories”的主文件夹
我已经尝试了很多想法,比如将库添加为新项目(相同的错误),将所有cpp文件添加到我的项目并使用它进行编译(不编译),仅添加我正在使用的.cpp文件(不太现实,太多),链接cryptopp610版本的所有不同文件夹(cryptdll,cryptlib,dll_output,输出,相同的错误),现在,我真的不知道我还能尝试什么。我makre也有很多搜索,尝试我看到的所有解决方案(不记得所有这些),仍然是同样的问题。我还尝试创建一个新项目来添加crypto ++而不需要长时间的编译或神秘的问题,但我也会遇到链接器错误。
有人有任何建议可以帮助我吗?无论如何,非常感谢,并原谅我的英语
编辑:需要在新的空白项目上添加,我得到63个未解析的外部符号,所以我想我忘了做一些基本的东西,但无法搞清哪个
答案 0 :(得分:1)
error LNK2019: unresolved external symbol "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl CryptoV2::encrypt(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?encrypt@CryptoV2@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@@Z) referenced in function "public: void __thiscall PStore::storeReversibleCrypt(wchar_t *,char *)" (?storeReversibleCrypt@PStore@@QAEXPA_WPAD@Z)
error LNK2001: unresolved external symbol "public: static class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl CryptoV2::hashPassword(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)" (?hashPassword@CryptoV2@@SA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V23@0@Z)
缺少的符号不是来自Crypto ++。 Crypto ++使用CryptoPP
命名空间。缺少的符号来自CryptoV2
命名空间或类。我猜这是另一个加密库。
您正确地将目录和库添加到链接器设置中。但是,您需要为CryptoV2
库(除了Crypto ++库)执行此操作。
为了完整起见,看起来缺少这些:
std::string CryptoV2::encrypt(std::string);
std::string CryptoV2::hashPassword(std::string, std::string);
答案 1 :(得分:0)
可能是Ws2_32.lib链接器中缺少
答案 2 :(得分:0)
添加#include "dll.h"
,如自述文件所述:
要在您的应用程序中使用Crypto ++ DLL,请在包含任何其他Crypto ++头文件之前#include“ dll.h”,并将该DLL与.exe文件放在同一目录中。 dll.h包含#pragma comment(lib,“ cryptopp”)行,因此您不必在项目设置中明确列出导入库。
https://github.com/weidai11/cryptopp/blob/master/Readme.txt#L136