我有一个模板VS .NET 2003项目,同事在开发他们的软件时复制和定制。
模板似乎被修改了一段时间,将IgnoreSpecificLibrary属性设置为同时具有发布和调试版本的libcmt.lib (即,对于发布和调试,构建都应该忽略链接器中的libcmt.lib )。
一些基于此的项目已经构建,发布版本引入了libcmtd.lib (通过查看项目.map文件可以明显看出),这似乎导致了一些运行时问题(即,一个对话框窗口被闪现,就好像已经设置了断点一样)。
将IgnoreSpecificLibrary设置为排除libcmt.lib是否会自动使项目链接到libcmtd.lib?
奇怪的是,构建模板(使用不正确的设置)会链接到libcmt.lib,而一些自定义项目(虽然不是全部)会链接到libcmtd.lib。
有什么想法吗?
发布于 2011-01-01 09:38:14
事情是这样的:
在编译之后,链接器获取你的对象文件,并创建一个符号表,其中有一个没有被填满的symol-request。然后,链接器遍历您的库列表,尝试解析那些未完全填充的符号。由于忽略了libcmt.lib,您的第三方库留下或添加了一些未解析的符号,并且它包含一个链接器请求来解析来自licmtd.lib (可能还有其他库)的那些符号,因为它包含了调试选项。
如果你没有忽略libcmt.lib,这些符号很可能会被libcmt.lib解析,并且不需要从libcmtd.lib中提取东西(即使它会被用来解析其他仍未填充的符号)。
您也可以尝试使用更多libcmtd.lib。如果你现在得到了无法解析的外部变量,那么忽略libcmt.dll可能不是一个好主意。
发布于 2010-12-03 20:55:21
许多项目忽略libcmt.lib,因为它与动态版本msvcrt.lib冲突。在链接器中忽略libcmt会使项目使用msvcrt.lib编译
https://stackoverflow.com/questions/4344569
复制相似问题