多线程DLL中的Cryptopp,VS2010

时间:2013-10-17 11:47:33

标签: c++ visual-studio-2010 crypto++

我正在尝试使用VS 2010在XPSP3上使用Cryptopp 5.6.2。新的...

我需要使用多线程DLL,因为这是我的应用程序使用的,所以我将Crypto ++项目属性中的所有引用从/MT[d]更改为/MD[d]。所有Crypto ++似乎都很好。

然而,所有人都对我的C ++控制台应用程序不满意 - 我有标准的GetNewAndDeleteForCryptoPP并且似​​乎被称为OK(删除它并且cryptopp给出错误,包含它并且cryptopp不会打印警告)

在我添加第PKCS5_PBKDF2_HMAC<SHA256>行之前,一切似乎都很好。它编译得很好但会导致CryptoPP::ThreadUserTimer::GetCurrentTimerValue(void)CryptoPP::ThreadUserTimer::TicksPerSecond(void)的未解析符号出现两个LNK2001错误 dll.h

这里没有想法 - 我无法在我工作的地方粘贴代码,但我已经包含了cryptlib.hosrng.haes.h,{{ 1}},sha.hhex.hinteger.hmodes.hpwdbased.h

我错过了一些令人眼花缭乱的事情吗?

2 个答案:

答案 0 :(得分:2)

我也遇到过这个问题,看起来这个类似乎没有被导出。将CRYPTOPP_DLL添加到ThreadUserTimer中的hrtimer.h声明即可解决问题。

答案 1 :(得分:1)

user1520427为您提供了答案。您需要为一些类和函数添加CRYPTOPP_DLL

PKCS5_PBKDF2_HMAC<SHA256>是仅限标头的实现,因此不需要CRYPTOPP_DLL。请参阅pwdbased.h

但是,ThreadUserTimer不是标头,因此您需要修改hrtimer.h

OLD:

00042 class ThreadUserTimer : public TimerBase
00043 {
00044    ...
00048 };

NEW:

00042 class CRYPTOPP_DLL ThreadUserTimer : public TimerBase
00043 {
00044     ...
00048 };