c++ - 如何在一个部分的末尾放置一个变量(使用 GCC)

标签 c++ gcc g++ ld linker-scripts

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

如果我有:

文件1.cpp:

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

在另一个文件 2.cpp 中:

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

如何强制 var2 位于 mysection 的末尾?

最佳答案

好吧,我最终采用了完全不同的方法,但我想在这里分享我的最终结论: 我基于 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”语法。所以实际的解决方案应该是复制默认的链接器脚本并将我的脚本信息添加到其中。

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

关于c++ - 如何在一个部分的末尾放置一个变量(使用 GCC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751378/

相关文章:

c - 此优化代码中调用的内容

c++ - 在 C++0x 中传递/移动构造函数的参数

c++ - 使用 getline 从文件中获取数据

c++ - 有没有一种简单的方法来获得 std::bitset<N> 的 2 的补码

c++ - 在 64 位 debian 上编译 GCC 的 CodeViz 补丁

c - 分配指针与 memcpy/memmove

c++ - 从Qt中的静态类方法发送信号

c++ - G++ ABI 兼容性列表

java - c++中unsigned long long的问题

c++ - 理解为什么存储在链表中的字符串不能正确打印