在 Visual Studio 2013 下为 /MD 版本重建 Crypto++ 5.6.2

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

我想通过 MSVC 2013 重建 Crypto++,所以当我使用库时能够使用 /MD 或 /MDd,而不是 /MT 或 /MTd 构建我的项目,因为我使用的是 QT 5.5.1 MSVC2013 32 位编译器,如果我想制作 GUI 界面,它似乎正在使用 /MD 或 /MDd!在 this article in section Static Versus Dynamic Linking is mentioned the necessity for rebuilding (not building) and how you can see from my other 我做到了,但它只适用于调试模式。对于 Release 模式,错误从 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

我正在做我提到的事情 here

I want to rebuild Crypto++ via MSVC 2013...

好的,所以这里的痛点是Microsoft changes to MSBuild at 2010. To make matters worse, VCUpgrade does a rather poor job of up-converting projects

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

升级的解决方案文件大部分是成功的。他们从 IDE 正确构建了 24 个配置中的 20 个。其中 4 个在第一次尝试时就失败了;但该过程在第二次尝试时恢复并构建了所有 24 个。我们知道这是一个 dependency/ordering 问题,但我们不知道如何解决它。在 How to control order of Batch Build → Build All.

上有一个关于 Stack Overflow 的悬而未决的问题

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


In this article ...

that article 年前写过。你走在正确的轨道上。


I did it, but it is only working for debug mode. For Release mode the errors from 117 go to 53, but again the same old error occures:

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
  2. 下载 vs2010-dynamic.zip
  3. 在现有的 Crypto++ 分发文件之上解压缩。

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

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

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

然后全部重建。