加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

对象符号覆盖库符号?

发布时间: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链接器也支持某种弱符号:
http://support.microsoft.com/kb/148652/EN-US
http://nikoniko-programming.blogspot.ch/2010/09/aliasing-symbol-names-during-link-time.html

但我在MSDN中找不到这个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读