Мне нужно вычислить SHA3 в моей программе, а также использовать AES в моих сокетах, и я решил использовать библиотеку crypto ++.
Я новичок в среде 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 - я использую dll, созданную в mingw-w64)
ОС: Windows 10 Pro 64 bit
Среда разработки: 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 в некоторых распространенныхПапка, как команда (установка) make install в gcc.
Редактировать:
Я добавил cryptopp.lib в дополнительных зависимостях и добавил папку, содержащую как cryptopp.lib, так и cryptopp.dll вДополнительный библиотечный каталог.Я добавил каталог в переменную окружения Path.Я выбрал многопоточный отладочный Dll в конфигурации Debug x64 во время создания dll в проекте cryptolib.