【问题标题】: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 编译器集合的链接器命令文件的确切语法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-18
        • 2019-10-15
        • 2013-08-14
        相关资源
        最近更新 更多