【问题标题】:GCC __attribute__((used)) vs. linker file KEEP statement?GCC __attribute__((used)) 与链接器文件 KEEP 语句?
【发布时间】:2022-01-06 02:36:13
【问题描述】:

使用“Gnu Arm Embedded Toolchain”,看来我需要在我的 .c 文件中有这两个语句:

__attribute__ ((section("section_name"),used))

我的 .ld 文件中的这个语句:

KEEP(sectionname)

为了使该特定部分不会被链接器垃圾收集 (--gc-sections) 删除。

谁能解释原因或指导我参考一些提到这一点的文档?

【问题讨论】:

    标签: gcc linker attributes ld


    【解决方案1】:

    编译器和链接器都可以删除他们认为未使用的函数(这通常意味着无法从 main 访问),因此要保留一个函数,您需要通知这两个工具。

    理论上编译器可以根据used 属性自动生成KEEP 语句,但由于历史原因,这不是这样做的。

    【讨论】:

    • 这似乎不适用于文件中所有对象都没有被引用的情况。即使指定了KEEP,文件也不会被链接。
    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    相关资源
    最近更新 更多