Visual Studio 2010下生成Crypto++ lib

关键字:VS2010 Cryptopp Crypto++ 5.6 build utility compile error

 

Crypto++是一个密码学的SDK开发包,有关它的信息可以访问以下两个网站:

http://www.cryptopp.com/

http://www.cryptopp.com/wiki/Main_Page

但Crypto++ Library 5.6.0在VS2010下无法Build生成cryptlib.lib,编译链接时提示如下错误:

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2440: 'initializing' : cannot convert from 'int' to 'const unsigned char *'

1>C:\Program Files\Microsoft Visual Studio 10.0\VC\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized

1>zdeflate.cpp(390): error C2653: 'stdext' : is not a class or namespace name

1>zdeflate.cpp(394): error C2228: left of '.first' must have class/struct/union

1>zdeflate.cpp(394): error C3861: 'unchecked_mismatch': identifier not found

找了很久,当时网上仅有一个地方给出了答案:

http://groups.google.com/group/cryptopp-users/browse_thread/thread/714f3ec6287a50b1

但这个网站不知什么原因在国内有些地方无法访问,通过部分代理(如http://www.7daili.com/)才能访问到,在这里做个总结,希望对大家能有所帮助。

 

使用VS2010打开Crypto++ Library 5.6.0时,一定要从"cryptest.dsw"打开,VS2010通过自动转换(conversion)可以打开Solution,如果从"cryptest.sln"打开,VS2010转换成10.0的Solution会提示报错,并且无法使用工程,如下图:

通过修改Crypto++ Library 5.6.0的2个地方,就可以解决以上问题,修改地方如下(红字为添加的代码):

1.

文件:pubkey.h

行数:243

原始代码:return HashIdentifier(NULL, 0);

修改代码:return HashIdentifier((const byte*)NULL, 0);

2.

文件:zdeflate.cpp

行数:389

原始代码:#if defined(_STDEXT_BEGIN) && !(defined(_MSC_VER) && _MSC_VER < 1400) && !defined(_STLPORT_VERSION)

修改代码:#if defined(_STDEXT_BEGIN) && !(defined(_MSC_VER) && (_MSC_VER < 1400 || _MSC_VER >= 1600)) && !defined(_STLPORT_VERSION)

然后,再重新build就可以成功生成cryptlib.lib了(Debug和Release下)。

 

注意:本文仅提供生成cryptlib.lib的方法,其它工程暂时无法在VS2010下成功编译链接。

转载于:https://www.cnblogs.com/cxun/archive/2010/07/29/1787748.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤在Windows下编译Crypto++: 1. 下载Crypto++源代码。你可以从官网(https://www.cryptopp.com/)或Github(https://github.com/weidai11/cryptopp)上下载最新版本的源代码。 2. 解压源代码压缩包到一个目录中。 3. 打开Visual Studio,创建一个新的空项目。 4. 将Crypto++源代码目录中的“cryptlib.h”和“config.h”文件添加到你的项目中。 5. 在Visual Studio中打开项目属性,选择“C/C++” -> “常规” -> “附加包含目录”,将Crypto++源代码目录添加到附加包含目录中。 6. 在项目中添加你要编译Crypto++源代码文件,例如AES加密的源代码文件“aes.cpp”和“rijndael.cpp”。 7. 在Visual Studio中打开“属性管理器”,选择“Microsoft.Cpp.Win32.user”属性表(如果你的项目是32位的)或“Microsoft.Cpp.x64.user”属性表(如果你的项目是64位的)。 8. 在“属性管理器”中选择“VC++目录” -> “包含目录”,添加Crypto++源代码目录。 9. 在“属性管理器”中选择“VC++目录” -> “库目录”,添加Crypto++源代码目录中的“Win32”(如果你的项目是32位的)或“x64”(如果你的项目是64位的)目录。 10. 在Visual Studio中打开“属性页”,选择“链接器” -> “输入”,添加“cryptlib.lib”到附加依赖项中。 11. 点击“生成” -> “生成解决方案”开始编译。 完成上述步骤后,你就可以在Windows上使用Visual Studio编译Crypto++库了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值