Visual Studio .NET 2003 - 忽略libcmt vs libcmtd的特定库

时间:2010-12-03 10:24:06

标签: c++ visual-studio libcmtd

我有一个模板VS .NET 2003项目,同事在开发软件时进行复制和自定义。

似乎模板被改变了一段时间以将IgnoreSpecificLibrary属性设置为具有libcmt.lib用于发布和调试版本(即,对于发布和调试,构建应该忽略链接器中的libcmt.lib)。

基于此的一些项目已经构建完成,其中发布版本引入libcmtd.lib(通过查看项目.map文件显而易见),这似乎导致了一些运行时问题(即对话框窗口被闪现为虽然设定了断点)。

设置IgnoreSpecificLibrary以排除libcmt.lib会自动使项目链接libcmtd.lib吗?

奇怪的是,构建模板(使用不正确的设置)链接libcmt.lib,而一些自定义项目(尽管不是全部)链接到libcmtd.lib。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

许多项目忽略libcmt.lib,因为它与动态版本msvcrt.lib冲突。 忽略链接器中的libcmt使项目使用msvcrt.lib

进行编译

答案 1 :(得分:2)

这就是发生的事情:

编译链接器后会获取对象文件并创建其他文件 符号表,其中包含尚未填充的symol-request。 然后链接器会遍历您尝试解决这些问题的库列表 未完成的符号。由于您忽略了libcmt.lib,因此您的第三方库 已经离开或添加了一些未解析的符号,它包含一个链接器请求 解决那些来自licmtd.lib(以及其他libs)的问题,因为它 用调试选项填写。

如果您没有忽略libcmt.lib,那么很可能会解析这些符号 通过libcmt.lib并没有必要从libcmtd.lib中提取内容(尽管如此 它将被视为解决其他尚未完成的符号)

您也可以尝试使用igmore libcmtd.lib。如果你现在得到unresolvd外部 忽略libcmt.dll是个不错的主意。