LNK2038:检测到' RuntimeLibrary':值' MT_StaticRelease'没有匹配的价值' MD_DynamicRelease'在file.obj中

时间:2015-03-05 20:22:30

标签: c++ matlab visual-c++ cuda

我正在将MatlabCCuda整合到一个项目中。我使用Matlab mix将c语言编写的matlab mx函数与cuda运行时库连接起来,出现了关于静态发布中的冲突和c文件与库之间的动态发布的链接错误。谁能解决这个问题?

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 

7 个答案:

答案 0 :(得分:47)

库和您的项目必须使用与C运行时库相同的设置进行链接。

在你的情况下,一个与CRT DLL(/ MD)相关联,另一个与静态链接(/ MT)。

您只需要确保两个匹配和this error都会消失。

答案 1 :(得分:30)

静态将项目与库(通常是扩展名为.lib的文件)链接时,可能会发生此错误,但Visual Studio项目中的链接器设置设置为动态< / strong> link(意味着链接将在运行时发生,通常使用.dll文件)。

要定义您需要项目使用静态链接,请启动 Visual Studio 。在 Solution Explorer 窗格中,右键单击项目名称,然后选择 Properties 。展开属性,如下图所示: C / C ++ - &gt;代码生成 - &gt;运行时库,从下拉菜单中选择Multi-threaded (/MT)选项。 enter image description here

答案 2 :(得分:3)

用于分享目的。

我正在使用2017 VS版本,该版本成功打开并运行旧的2008解决方案。现在,如果出于某种原因,即使您将所有库和主项目更改为具有相同的运行时库参数(在属性下,请参见上面的海报),但仍然会收到相同的错误消息,请尝试打开每个.vcxproj文件。在“RuntimeLibrary”下搜索并在所有vcxproj文件中使它们的值相同。出于某种原因,这些vcxproj文件永远不会更新为我在属性设置中声明的相同值,我必须在vcxproj中手动更改它们。

或者,如果您愿意,也可以打开vcproj文件并将其“RuntimeLibrary”更改为相同。这里的值是数字。

答案 3 :(得分:1)

以下是正确的修复步骤

Error   69  error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'

这意味着运行库lib是静态 aka lib MT_StaticRelease ),与您预测的值 Dynamic 不同>库aka dll MD_DynamicRelease

  • 右键单击解决方案
  • 点击属性
  • 配置属性->常规

将配置类型从动态库(dll)更改为静态库(lib)

enter image description here

如果情况相反,上述步骤不能解决问题,请使用此选项

C / C ++->代码生成->运行时库选择多线程 enter image description here

答案 4 :(得分:0)

作为对GWKit的评论,这样做会更好,但是我对此没有声誉。他提到必须更新vcxproj文件,因为它们实际上并未更改。就我而言,它们仅在点击“ saveAll”然后关闭Visual Studio之后才保存。我收到提示,询问是否要保存对已保存的属性的更改,单击“是”后,vcxproj文件已正确更新。

答案 5 :(得分:0)

正如其他人提到的那样,cl.exe上的运行时库开关必须在所有已编译模块之间匹配。在MSBuild中,将其称为ClCompile> / RuntimeLibrary。

但是,即使这些匹配,即使项目中的某个地方有“ #undef DEBUG”或“ #undef _DEBUG”,您仍然可能会遇到此问题。如果更改了这些宏,则VC ++运行时库标头中的yvals.h标头可以更改编译到obj文件中的内容。

使用“ dumpbin / all foo.obj> foo.txt”检查obj文件中实际包含的内容。在该输出中查找标题“链接器指令”。

答案 6 :(得分:0)

此链接器错误是由于项目配置不正确而导致的,可能是您在与主项目配置不同的配置中构建了库。如果您的项目配置是发布\调试,那么您应该在构建库时选择相同的配置。