【问题标题】:Duplicate symbols in Microsoft C libraryMicrosoft C 库中的重复符号
【发布时间】:2014-04-13 16:06:04
【问题描述】:

我正在为 Windows PE 格式的目标文件编写一个链接器,我已经到了可以将 Microsoft 编译器生成的目标文件链接在一起的阶段,但是当我尝试与 libcmt.lib 链接时,我得到了一个很多重复的符号。

例如,cosl 由库中的三个不同对象定义。这三个都指不同地方的定义,并且所有三个看起来都是真实的,例如它们指向名为 .text$mn 的文本段,并具有存储类 IMAGE_SYM_CLASS_EXTERNAL

这些是替代版本,链接器应该根据某些标准选择一个,还是我误解了 PE 库格式的语义?

【问题讨论】:

  • 我假设您已验证在使用常规编译器工具进行编译/链接时没有收到“重复符号”错误,以确保这是您的链接器代码的问题?
  • @Devolus 是的,Microsoft 链接器工作正常。
  • 偏移量是否也指向不同的对象?
  • 粗略的猜测是您没有正确处理 COMDAT 部分,被 cosl() 等内联函数使用。阅读pecoff specification 的第 5.5.6 节。
  • @HansPassant 是的,我想就是这样。谢谢!

标签: c windows visual-c++ linker portable-executable


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多