链接器脚本中*(。data),*(。data *)和*(。data。*)之间的差异

时间:2016-11-24 12:53:59

标签: c gcc linker ld

只是想知道这些结构之间有什么区别(文字数据 rodata bss etc)在链接器脚本中:

.data :
{
    *(.data)
}


.data :
{
    *(.data*)
}


.data :
{
    *(.data.*)
}

在所有情况下,我们都会收集所有目标文件中的数据部分,但是魔鬼就是详细信息。

快速测试显示 map 文件中的地址不同,反过来又会影响可执行文件的大小。

我试图在 ld documentation中找到相关信息,但一无所获(或者只是错过了它)。

我想它应该是非常简单的东西(所谓的明显的)。

任何想法都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

在您可以使用特定文件或部分名称的任何地方,您也可以使用通配符模式。

它的工作方式类似于常规模式

  • *(.data) - .data部分,示例: .data
  • *(.data*) - .data * section,示例: .dataTEST
  • *(.data.*) - .data。* section,示例: .data.TEST

Find more info here