对象符号覆盖库符号?
发布时间:2020-12-16 07:08:10 所属栏目:百科 来源:网络整理
导读:当您在两个不同的C源文件中定义相同的函数(非静态),编译它们并将它们与Microsoft链接器链接时,您会收到重复的符号错误消息,如预期的那样. 另一方面,当您定义一个与标准库函数的名称匹配的函数时,例如cos(未定义为COMDAT)则没有错误;您的定义将以静默方式覆盖
当您在两个不同的C源文件中定义相同的函数(非静态),编译它们并将它们与Microsoft链接器链接时,您会收到重复的符号错误消息,如预期的那样.
另一方面,当您定义一个与标准库函数的名称匹配的函数时,例如cos(未定义为COMDAT)则没有错误;您的定义将以静默方式覆盖标准库定义.这也是理想的行为,但我试图找出确切的规则是什么. 规则’在目标文件中定义的符号是否覆盖在库文件中定义的符号’或其他内容?我在PE规范中找不到任何提及,但也许我忽略了一些东西. 解决方法
MS链接器仅链接解析依赖关系所需的静态库中的那些成员对象.来自静态库的未使用的成员对象被优化掉.因此,如果静态库成员对象中有重复的符号,但不需要成员对象,则不会出现错误.也可以看看:
http://msdn.microsoft.com/en-us/library/72zdcz6f.aspx 似乎MS链接器也支持某种弱符号: 但我在MSDN中找不到这个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |