我正在将Matlab
,C
和Cuda
整合到一个项目中。我使用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.
答案 0 :(得分:47)
答案 1 :(得分:30)
当静态将项目与库(通常是扩展名为.lib的文件)链接时,可能会发生此错误,但Visual Studio项目中的链接器设置设置为动态< / strong> link(意味着链接将在运行时发生,通常使用.dll文件)。
要定义您需要项目使用静态链接,请启动 Visual Studio 。在 Solution Explorer 窗格中,右键单击项目名称,然后选择 Properties 。展开属性,如下图所示: C / C ++ - &gt;代码生成 - &gt;运行时库,从下拉菜单中选择Multi-threaded (/MT)
选项。
答案 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)
如果情况相反,上述步骤不能解决问题,请使用此选项
答案 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)
此链接器错误是由于项目配置不正确而导致的,可能是您在与主项目配置不同的配置中构建了库。如果您的项目配置是发布\调试,那么您应该在构建库时选择相同的配置。