编译cryptopp时MT/MD不匹配,尽管没有库依赖项
MT / MD mismatch when compiling cryptopp despite no library dependencies
我目前正试图在Windows 8.1计算机上使用MS Visual Studio 2013编译cryptopp的静态64位版本(更准确地说,是cryptlib VS项目)。由于它是一个静态版本构建,我已经将Runtime Library设置为Multithreaded(/MT)。
但是,链接器会抛出以下几个错误:
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in adhoc.obj
在我在这里和谷歌上发现的大多数类似情况下,这是由一个库设置/MT和另一个库的设置/MD引起的。这种情况的奇怪之处在于,链接器不包括任何库(除了Visual Studio内部的一些魔术),也没有额外的包含目录。链接器命令行组合为:
/OUT:"buildx64static_releasecryptlib64.lib" /LTCG /MACHINE:X64 /NOLOGO
在项目文件中,我找不到任何其他<运行时库>除了那些在项目级别上的设置,所以我认为没有.cpp文件具有/MD开关。
总之,这意味着我的库定义了/MT,但crytlib内部使用的东西似乎定义了/MD。有没有一种方法可以找出这个开关定义了什么对象/cpp/define/library/什么?
此链接器诊断是一个100%准确的提示,表明您实际上正在链接构建错误的.obj或.lib文件。几乎总是你不知道的.lib文件,因为你不必显式地将它们列为附加依赖项。MSVC++使指定链接依赖关系变得非常容易,而无需使用设置,例如在源代码文件中使用添加引用或#pragma comment(lib, "yadayada.lib")
。当然非常方便,但当您试图解决这样的链接器错误时,就不那么明显了。
它很容易诊断,但是,链接器可以选择向您显示它实际链接的内容。使用Project+Properties、Linker和Command Line,然后添加/VERBOSE
选项。链接器现在可以非常方便地访问Output窗口,向您显示它加载的每个.lib文件以及它从.lib文件中使用的符号。
lib名称应该足以提示您从哪里开始查找,您应该从那里知道#include。你是否能用/MT构建真的还悬而未决,如果它是DLL的导入库,那么几率会迅速降低。避免强迫,在一个过程中有多个CRT副本是充满麻烦的。
清洁解决方案,然后重新构建可能会有所帮助。链接器似乎仍在尝试使用旧的对象文件(在您应用/MT之前)
这种情况的奇怪之处在于,链接器不包括任何库(除了一些Visual Studio内部的魔术)
如果你确信它不是你装备中的东西,那么它很有可能是从哪里来的。
如果您可以选择动态C++运行时链接,那么您可以考虑将其用于Crypto++。为了解决将Crypto++转换为Visual Studio 2010(及更高版本)以及转换为/MD
和/MDd
的问题,可以使用vs2010-dynamic.zip
。只需在现有Crypto++源的顶部打开它。
另请参阅堆栈溢出上检测到的"RuntimeLibrary"和Crypto++不匹配。
- 如何从C++中的依赖类型中获得它所依赖的类型
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 将依赖名称显式标记为类型名和模板的奇怪之处
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- C++GTKMM gui循环依赖关系
- 通过ccmake在cmake中缓存依赖选项
- 哈希文件递归并保存到矢量Cryptopp中
- 当基类是依赖类型时,这是一个缺陷吗
- 从不同的附加依赖项中识别等同命名的函数
- 如何在 CMake 中对目标依赖项进行分组?
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 为什么构建目录中新构建的共享库与安装目录中的副本具有不同的依赖项集?
- Cryptopp:获取密码输入的填充字符串
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么内存屏障依赖于变量?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 反转依赖于 end() 的迭代器
- 编译cryptopp时MT/MD不匹配,尽管没有库依赖项
- Cryptopp外部库依赖