我正在为 Windows PE 格式的目标文件编写一个链接器,并且已经到了可以将 Microsoft 编译器生成的目标文件链接在一起的阶段,但是当我尝试与 libcmt.lib 链接时,我得到了很多重复的符号。
例如,
cosl
由库中的三个不同对象定义。这三个都指的是不同地方的定义,并且这三个看起来都是真实的,例如它们指向名为 .text$mn
的文本段,并具有存储类 IMAGE_SYM_CLASS_EXTERNAL
。
这些是备用版本,链接器应该根据某些标准选择一个版本,还是我误解了 PE 库格式的语义?
正如评论中提到的,OP 没有正确处理 COMDAT 部分。 https://download.microsoft.com/download/9/C/5/9C5B2167-8017-4BAE-9FDE-D599BAC8184A/pecoff.docx