4

我想在其内存部分的末尾放置一个特定的变量。

所以如果我有:

文件 1.cpp:

__attribute__((section(".mysection"))) char var1[] = "var1";

在另一个 file2.cpp 中:

__attribute__((section(".mysection"))) char var2[] = "var2";

我怎么能强迫var2在最后mysection

4

2 回答 2

3

好吧,我最终采取了完全不同的方法,但我想在这里分享我的最终结论:我基于如何获取代码的结束地址

在代码中,您必须添加对变量的外部引用:

extern char var2[];

链接描述文件必须编写如下:

SECTIONS
{
    .mysection : {
        *(.mysection);
        var2 = .;
    }
}
INSERT AFTER .mysection

在链接期间添加链接器脚本(例如ld -T <PATH_TO_MY_LINKER_SCRIPT>INSERT AFTER使用该部分,因此我的链接器脚本将添加到默认链接器脚本中。

我不得不使用'gold'来链接我的elf文件,显然我使用的版本不支持'INSERT AFTER'语法。所以实际的解决方案应该是复制默认的链接器脚本并将我的脚本信息添加到它。

虽然我还没有测试过,但我仍然希望它可以帮助别人。

于 2013-05-26T03:36:28.243 回答
0

您必须在链接器命令文件中创建自己的部分,并将您的部分适当地放置在链接器命令文件的变量部分中。

对于大多数链接器,您无法告诉它确切变量的顺序。更简单的解决方案是为每个变量创建一个部分,并告诉链接器您希望这些部分如何排序。

查找 GNU 编译器集合的链接器命令文件的确切语法。

于 2013-05-25T17:27:19.383 回答