【问题标题】:Building and linking test code for Crypto++为 Crypto++ 构建和链接测试代码
【发布时间】:2012-12-14 03:14:00
【问题描述】:

我正在尝试为项目的 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);

如果有人可以提供帮助,或者为我指明正确的方向,我将不胜感激。

【问题讨论】:

  • 一个简单的健全性检查是打开链接器启动横幅并确保您想要的库实际上在列表中
  • 好的,这和在 C/C++ 通用属性中关闭 Suppress start up banner 一样吗?如果是这样,现在正在输出的命令行不会列出我希望与之链接的任何文件 =x
  • 确保在 Linker->General 属性(不是 C/C++)中关闭该选项,并查看它是否显示您期望的 .obj 和 .lib 文件。
  • 太棒了。禁用隐藏它,看到它不在命令行中。我在链接器设置中找到了输入字段,并手动添加了cryptlib.h。这是你应该用VS做的,手动添加.lib文件吗?我不确定它应该在哪个文件夹中,但我假设项目的最高级别,尽管我之前也到处尝试过。不过,这确实奏效了。您能否将其发布为答案,或者澄清有关在 VS 中进行链接的秘密,以便我可以标记它?非常感谢=D

标签: c++ linker crypto++


【解决方案1】:

首先要检查的是您的项目属性(右键单击项目,单击Properties)。

需要在Linker->Input->Additional Dependencies 字段中指定外部库,可以通过绝对路径,也可以结合其他 VS 路径属性。

您可以查看 Linker->Command Line 并检查您想要的 .lib 文件是否实际被传递给链接器。

另一种方法是关闭Linker->General 选项中的Suppress Startup Banner 选项,然后检查构建输出以确保它有你想要的。

如果你知道你想要的库正在被链接,另一个有用的技巧是在 VS 命令提示符中检查strings 命令(在 linux 或 cygwin 中)或dumpbin /HEADERS 的输出。您可以查看这些命令的输出中是否缺少符号 VS 声明,以验证它是否确实在 .lib 文件中定义。有时较大的软件包有多个 .lib 文件,因此这有助于确保您链接的是具有所需符号的那个。

【讨论】:

    猜你喜欢
    • 2013-01-15
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2017-10-21
    • 1970-01-01
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多