Я пытаюсь написать простой тестовый код для библиотеки Crypto ++ для проекта. Мне все еще не удалось получить собственный код для сборки. Компилируется нормально, проблема в линковке. Я все еще довольно новичок в Visual Studios, но я использую VS10. Я получаю следующие ошибки:
1>sec_test.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::DES::Base::ProcessAndXorBlock(unsigned char const *,unsigned char const *,unsigned char *)const " (?ProcessAndXorBlock@Base@DES@CryptoPP@@UBEXPBE0PAE@Z)
1>sec_test.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall CryptoPP::DES::Base::UncheckedSetKey(unsigned char const *,unsigned int,class CryptoPP::NameValuePairs const &)" (?UncheckedSetKey@Base@DES@CryptoPP@@UAEXPBEIABVNameValuePairs@3@@Z)
Я перепробовал все, что могу найти в документации с точки зрения ссылок. Я никогда не связывался с DLL раньше, но это ошибки, которые я получаю, когда пытаюсь это сделать. Если я попытаюсь сделать то, что я считаю связыванием со статической версией библиотеки, я получу еще больше.
Должен заметить, я сейчас пытаюсь протестировать чистый DES. В частности, вот вызовы API, которые я делаю, просто чтобы быть в безопасности:
DES::Encryption DES_encrypt;
DES_encrypt.SetKey(key, 64);
DES_encrypt.ProcessAndXorBlock(plaintext, NULL, ciphertext);
DES::Decryption DES_decrypt;
DES_decrypt.SetKey(key, 64);
DES_decrypt.ProcessAndXorBlock(ciphertext, NULL, decrypted);
Если кто-то может помочь или указать мне правильное направление, я был бы очень благодарен.
Первое, что нужно проверить, это свойства вашего проекта (щелкните правой кнопкой мыши на проекте, нажмите Properties
).
Внешние библиотеки должны быть указаны в Linker->Input->Additional Dependencies
поле, либо по абсолютному пути, либо в сочетании с другими свойствами пути VS.
Вы можете посмотреть в Linker->Command Line
и проверьте, что .lib-файлы, которые вы хотите, действительно передаются компоновщику.
Альтернативный метод — отключить Suppress Startup Banner
вариант в Linker->General
параметры, а затем проверьте вывод сборки, чтобы убедиться, что он имеет то, что вы хотите.
Если вы знаете, что библиотеки, которые вы хотите, связаны, другой полезный трюк — проверить вывод strings
команда (в Linux или Cygwin) или dumpbin /HEADERS
в командной строке VS Вы можете просмотреть выходные данные этих команд на предмет отсутствия символа VS, чтобы убедиться, что он действительно определен в файле .lib. Иногда в больших пакетах программного обеспечения есть несколько файлов .lib, поэтому это может помочь вам убедиться, что вы связываете тот, у которого есть нужный вам символ.
Других решений пока нет …