【发布时间】:2018-06-01 12:08:05
【问题描述】:
我需要在我的程序中计算 SHA3 并在我的套接字中使用 AES,并决定使用 crypto++ 库。
我是 Visual Studio 环境的新手,之前没有在 Visual Studio 方面的经验,但我在 g++ (linux/mingw-w64) 上有过广泛的工作。我正在使用的第三方库之一推荐使用 Visual Studios(与 g++ 一起使用时会导致链接器错误)。
我收到链接器错误。 错误:
LNK2001 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::Update(unsigned char const *,unsigned __int64)" (?Update@SHA3@CryptoPP@@UEAAXPEBE_K@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
LNK2019 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::Restart(void)" (?Restart@SHA3@CryptoPP@@UEAAXXZ) referenced in function "public: __cdecl CryptoPP::SHA3::SHA3(unsigned int)" (??0SHA3@CryptoPP@@QEAA@I@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
Error LNK2001 unresolved external symbol "public: virtual void __cdecl CryptoPP::SHA3::TruncatedFinal(unsigned char *,unsigned __int64)" (?TruncatedFinal@SHA3@CryptoPP@@UEAAXPEAE_K@Z) ConsoleApplication2 C:\Users\Admin\source\repos\ConsoleApplication2\ConsoleApplication2\ConsoleApplication2.obj 1
相同的代码在 g++ 中正常工作(mingw-w64 - 我正在使用在 mingw-w64 中创建的 dll)
操作系统:Windows 10 Pro 64 位
开发环境:Visual Studios 2017
目标:调试 x64
来源:
#include <sha3.h>
#include <filters.h>
#include <hex.h>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iostream>
#include <base64.h>
int main()
{
CryptoPP::SHA3_512 hash;
std::cout << hash.AlgorithmName() << " Test." << std::endl;
std::string in = "The quick brown fox jumps over the lazy dog";
std::vector<CryptoPP::byte> out(hash.DigestSize());
hash.CalculateTruncatedDigest(&out[0], hash.DigestSize(), reinterpret_cast<CryptoPP::byte*>(&in[0]), in.size());
std::cout << in << std::endl;
std::cout.setf(std::ios::hex, std::ios::basefield);
for_each(out.begin(), out.end(), [](CryptoPP::byte i) {
printf("%x", i);
});
std::cout << "Original String : " << str << std::endl;
return 0;
}
请告诉我如何在某个公共文件夹中加载(复制)所有生成的 dll,就像 gcc 中的 make install 命令(工具)一样。
编辑:
我在附加依赖项中添加了 cryptopp.lib,并在附加库目录中添加了包含 cryptopp.lib 和 cryptopp.dll 的文件夹。我在 Path 环境变量中添加了目录。我在cryptolib项目中生成dll期间在Debug x64配置中选择了多线程调试Dll。
【问题讨论】:
-
您需要有 .lib 和 .dll 文件。转到您的项目-> 右键单击属性-> 在链接部分下选择输入-> 在此处提及您要使用的所有 .lib dll。然后提供 dll 的路径,您将它们放在 Linker->Genera-> 附加包含目录中
-
@StraightCirle,这样做仍然没有成功。对不起,我应该在我的原始帖子中提到。
-
另见 Crypto++ wiki 上的 FIPS DLL。旧的/过时的 FIPS DLL 不包括 SHA3,因为 SHA3 早于最后一次 FIPS 验证。您可能希望避免使用 FIPS DLL,而只使用静态库。静态库称为
cryptlib.lib。 wiki 上另一个感兴趣的页面是Visual Studio。
标签: c++ visual-studio crypto++