我想在其内存部分的末尾放置一个特定的变量。
所以,如果我有:
file1.cpp:
__attribute__((section(".mysection"))) char var1[] = "var1";
和另一个file2.cpp:
__attribute__((section(".mysection"))) char var2[] = "var2";
如何强制var2
位于mysection
的末尾?
答案 0 :(得分:3)
好吧,我最后采取了一种完全不同的方法,但我想在这里分享我的最终结论: 我的基础是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'语法。所以实际的解决方案应该是复制默认的链接描述文件,只需添加我的脚本信息即可。
我没有测试过,但我仍然希望它可以帮助别人。
答案 1 :(得分:0)
您必须在链接器命令文件中创建自己的部分,并将您的部分放在链接器命令文件的变量部分中。
对于大多数链接器,您无法告诉它确切变量的顺序。更简单的解决方案是为每个变量创建一个部分,并告诉链接器您希望如何订购部分。
查找GNU编译器集合的链接器命令文件的确切语法。