gpt4 book ai didi

c - 对象符号覆盖库符号?

转载 作者:可可西里 更新时间:2023-11-01 13:46:58 26 4
gpt4 key购买 nike

当您在两个不同的 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 中找不到这个。

关于c - 对象符号覆盖库符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22403792/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com