我正在尝试为项目的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);
如果有人可以提供帮助,或指出我正确的方向,我会非常感激。
答案 0 :(得分:1)
要检查的第一件事是您的项目属性(右键单击项目,单击Properties
)。
需要在Linker->Input->Additional Dependencies
字段中指定外部库,可以是绝对路径,也可以与其他VS路径属性一起使用。
您可以查看Linker->Command Line
并检查所需的.lib文件是否实际传递给链接器。
另一种方法是关闭Suppress Startup Banner
选项中的Linker->General
选项,然后检查构建输出以确保它具有您想要的内容。
如果您知道所需的库是链接的,另一个有用的技巧是在VS命令提示符中检查strings
命令(在linux或cygwin中)或dumpbin /HEADERS
的输出。您可以查看这些命令的输出,以查找缺少VS声明的符号,以验证它是否确实在.lib文件中定义。有时较大的软件包有多个.lib文件,因此这有助于确保链接具有所需符号的文件。