我有一个模板VS .NET 2003项目,同事在开发软件时进行复制和自定义。
似乎模板被改变了一段时间以将IgnoreSpecificLibrary属性设置为具有libcmt.lib用于发布和调试版本(即,对于发布和调试,构建应该忽略链接器中的libcmt.lib)。
基于此的一些项目已经构建完成,其中发布版本引入libcmtd.lib(通过查看项目.map文件显而易见),这似乎导致了一些运行时问题(即对话框窗口被闪现为虽然设定了断点)。
设置IgnoreSpecificLibrary以排除libcmt.lib会自动使项目链接libcmtd.lib吗?
奇怪的是,构建模板(使用不正确的设置)链接libcmt.lib,而一些自定义项目(尽管不是全部)链接到libcmtd.lib。
有什么想法吗?
答案 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是个不错的主意。