- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为 Windows 二进制文件编写一个链接器,目前正致力于实现 COMDAT。我想我理解大部分规范,除了 COMDAT 部分的三个记录(部分标题、部分符号和辅助符号),规范似乎没有提到存储在其中任何一个中的通用名称。
换句话说,当我在这样的对象上运行 dumpbin 时,它会给出如下输出:
SECTION HEADER #8
.text$mn name
0 physical address
0 virtual address
5 size of raw data
2358 file pointer to raw data (00002358 to 0000235C)
235D file pointer to relocation table
0 file pointer to line numbers
1 number of relocations
0 number of line numbers
60301020 flags
Code
COMDAT; sym= cosl
最后一项 sym= cosl
来自哪里?或者,如果它只是一个指向该部分的常规符号,那么如果有多个不同的此类符号指向它会怎样?
最佳答案
根据Microsoft PE and COFF Specification ,第 4.5.6 节(如果您正在编写链接器,我相信您已经仔细阅读过),sym= 值是 COMDAT 符号,它由链接器与选择值以确定要在最终镜像中保留 COMDAT 部分的哪个副本。每个 COMDAT 部分的符号表中有两个条目。第一个包含部分名称和带有选择信息的辅助记录。 COMDAT 符号值来自 COMDAT 部分的符号表中的第二个条目。它要么是符号的 ShortName 值,要么是它指向的字符串表条目的值。
要链接的各种对象文件中相同 COMDAT 的所有副本的 COMDAT 符号值应该相同。如果我正确理解规范,任何一个目标文件中的特定 COMDAT 部分都应该只有两个符号表条目具有匹配的 SectionNumber。您不应看到多个具有不同值的 COMDAT 符号字符串作为单个 COMDAT 的符号表条目。
关于windows - COMDAT 段名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22384480/
我正在为 Windows 二进制文件编写一个链接器,目前正致力于实现 COMDAT。我想我理解大部分规范,除了 COMDAT 部分的三个记录(部分标题、部分符号和辅助符号),规范似乎没有提到存储在其中
我看到/Gy 选项,想知道为什么要使用它? http://msdn.microsoft.com/en-us/library/xsa71f43.aspx 最佳答案 COMDAT 节的目的是允许在多个对象
当使用 Microsoft 编译器编译和链接 C 代码时,不同目标文件中具有相同名称的定义根据定义的类型有多种可能的结果。 int x[5] = {1}; int x[5] = {1}; 两个初始化的
假设我有一个对象的多个定义,这些定义跨不同的对象文件定义,并且我想将它们链接在一起。似乎有两种方法可以选择在将这些目标文件链接在一起时使用哪个定义:将符号标记为弱,或将其放在它自己的 COMDAT 部
这个问题在 SO 上有一些答案,但我的略有不同。在标记为重复之前,请试一试。 MSVC 一直提供/Gy 编译器选项,以允许将相同的函数折叠到 COMDAT 部分中。同时,链接器还提供了/OPT:ICF
这是我从 dumpbin AchievementsTable.obj /HEADERS 得到的输出 Microsoft (R) COFF/PE Dumper Version 8.00.50727.76
只是好奇,GCC 或 Clang 工具集是否实现了等效于 MSVC 的 identical COMDAT folding (ICF) 目前?如果没有,有什么计划吗?除了旧的 GCC 邮件列表消息之外,
当我链接我的项目时,我收到了这个错误, COMMUNICATION.obj : fatal error LNK1179: invalid or corrupt file: duplicate COMD
我在一台 Windows 10 机器上,我有 2 个文件,main.cpp 和 cuda.cu(我已经在 Ubuntu 上成功构建了这个项目,我正试图让它在 Windows 上构建)。我将它们都编译成
我是一名优秀的程序员,十分优秀!