1

我想获取.data为特定 C 文件生成的部分中的符号,并将它们放在.mydata最终可执行文件的不同部分(例如)中。例如,

normaldata.c:  char * my_str = "this should appear in .data";
specialdata.c: char * my_special_str = "this should appear in .mydata";

默认情况下,两者都my_str出现my_special_str在该.data部分中。但是,当我生成 时specialdata.o,我想将任何可能出现的内容发送.data.mydata.

我知道我可以使用__attribute__((section(".mydata")))来实现此效果,但我不知道如何将其应用于结构的指针成员的指定初始值设定项(我已经简化了此问题的代码)。所以相反,我在想也许我可以使用链接器脚本并将特定文件中的所有数据发送到我的特殊部分。

我试过这个链接器脚本(link.lds):

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

gcc -c specialdata.c -T link.lds -o specialdata.o但输出objdump -x specialdata.o显示一个.data部分但没有.mydata部分。

我究竟做错了什么?

4

1 回答 1

0

在您的 C 声明中,该section()属性指定链接器的输入节名称。在链接描述文件部分中.mydata指定的名称是输出节的名称。在您告诉链接器将“ ”输入节中的所有符号放入输出节中,但您的 C 属性使用输出节的名称。SECTIONS.mydata*(.data).mydata

要让链接器将 C 变量放置在正确的输出节中,您必须在.mydata输出节定义和 Csection()属性中对输入节使用相同的名称。

尝试更改输入部分的名称并在链接描述文件和 C 属性中使用相同的名称。

链接器脚本:

SECTIONS
{
    /* Put all symbols from the .my_data input section into the
     * .mydata output section.
     */
    .mydata : { *(.my_data) }
}

specialdata.c 来源:

// Note that the input section name is ".my_data", not ".mydata".
char * my_special_str __attribute__((section(".my_data"))) =
    "this should appear in .mydata";
于 2015-04-24T12:40:30.427 回答