在Visual Studio 2013下重新编译Crypto++ 5.6.2 for /MD版本

Rebuild Crypto++ 5.6.2 for /MD release under Visual Studio 2013

本文关键字:Crypto++ for 版本 MD 编译 2013下 Studio Visual 新编译      更新时间:2023-10-16

我想通过MSVC2013重建Crypto++,所以当我使用库能够用/MD或/MDd,而不是/MT或/MTd构建我的项目时,因为我正在使用QT 5.5.1与MSVC2013 32位编译器,似乎如果我想制作GUI界面-它正在使用/MD或/MDd!在本文中,第Static Versus Dynamic Linking节提到了重建(而不是构建)的必要性,以及您如何从我的另一个问题中看到我这样做了,但它仅适用于调试模式。对于释放模式,从117到53的错误,但是同样的旧错误发生:

cryptlib.lib(cryptlib.obj):-1: error: LNK2038: mismatch detected for'RuntimeLibrary':值'MT_StaticRelease'不匹配值'MD_DynamicRelease' in main.obj

我正在做我在这里提到的

我想通过MSVC 2013重建Crypto++…

好的,这里的痛点是微软在2010年对MSBuild的更改。更糟糕的是,VCUpgrade在向上转换项目方面做得相当差。

为了帮助用户完成升级过程,Crypto++提供了一个名为vs2010.zip的文件。该归档文件包含Visual Studio 2010及以上版本的预转换的解决方案文件、项目文件和过滤器。这些文件于2015年10月发布,发布候选版本为5.6.3。

升级后的解决方案文件大多是成功的。他们从IDE中正确构建了24个配置中的20个。其中4人第一次尝试失败;但该过程在第二次尝试时恢复并构建所有24个。我们知道这是一个依赖/排序问题,但我们不知道如何解决它。在如何控制批构建→全部构建的顺序中有一个关于堆栈溢出的开放问题。

现在有一个关于Visual Studio 2010和VCUpgrade主题的页面。参见Crypto++ wiki上的Visual Studio。


在本文中…

那篇文章是我多年前写的。你走对了路。

我做了,但它只适用于调试模式。对于释放模式,从117到53的错误,但是同样的旧错误发生:

cryptlib.lib(cryptlib.obj):-1: error: LNK2038: mismatch detected for 'RuntimeLibrary':
value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in main.obj

我们为你添加了一个ZIP文件。ZIP是一个预先转换的Visual Studio 2010解决方案和项目文件,利用动态运行时链接(/MD/MDd)。(这不只是你一个人,因为这些年来很多人都问过这个问题)。

你的问题的解决办法是:

  1. 从Crypto++ wiki下载vs2010-dynamic.zip
  2. 在现有的crypto++发行文件上解压缩。

我使用cryptopp从源/MD,构建在vs2013上使用最新的cryptopp版本(5.6.2)。您希望使用最新的加密或安全软件,而且它们可能存在固定的平台构建问题。

您引用的问题听起来像是使用/MT集构建项目的中间文件,即使后来更改为/MD(尽管很容易忘记将下拉菜单更改为"所有配置",并仅更改一个项目中的调试设置)。

首先清理解决方案,然后确保将每个项目更改为[粗体]中的/MD所有配置[粗体],然后再次清理解决方案。现在搜索并删除任何调试或发布文件夹和。obj .lib .dll文件,因为我不相信"干净的解决方案"。它只能得到它打算在当前设置下构建的文件,但链接器可能会在链接搜索(/verbose:lib)中找到更多。