【问题标题】:How to place a variable at the end of a section (with GCC)如何将变量放在节的末尾(使用 GCC)
【发布时间】:2013-05-21 00:33:56
【问题描述】:
我想在其内存部分的末尾放置一个特定的变量。
如果我有:
file1.cpp:
__attribute__((section(".mysection"))) char var1[] = "var1";
在另一个file2.cpp中:
__attribute__((section(".mysection"))) char var2[] = "var2";
如何强制var2 位于mysection 的末尾?
【问题讨论】:
标签:
c++
gcc
g++
ld
linker-scripts
【解决方案1】:
好吧,我最终采取了完全不同的方法,但我想在这里分享我的最终结论:
我基于How to fetch the end address of my code
在代码中,你必须为变量添加一个extern引用:
extern char var2[];
链接描述文件必须编写如下:
SECTIONS
{
.mysection : {
*(.mysection);
var2 = .;
}
}
INSERT AFTER .mysection
在链接期间添加链接器脚本(例如ld -T <PATH_TO_MY_LINKER_SCRIPT>)
使用了INSERT AFTER 部分,因此我的链接器脚本将被添加到默认链接器脚本中。
我必须使用“gold”链接我的 elf 文件,显然我使用的版本不支持“INSERT AFTER”语法。所以实际的解决方案应该是复制默认的链接器脚本,然后将我的脚本信息添加到其中。
虽然我还没有测试过,但我仍然希望它可以帮助某人。
【解决方案2】:
您必须在链接器命令文件中创建自己的部分,并将您的部分适当地放置在链接器命令文件的变量部分中。
对于大多数链接器,您无法告诉它确切变量的顺序。更简单的解决方案是为每个变量创建一个部分,并告诉链接器您希望这些部分如何排序。
查找 GNU 编译器集合的链接器命令文件的确切语法。