【问题标题】:gcc - use #pragma to apply __attribute__((section(".dflash_code"))) to entire source filegcc - 使用 #pragma 将 __attribute__((section(".dflash_code"))) 应用于整个源文件
【发布时间】:2017-11-21 16:06:07
【问题描述】:

我真的不想将__attribute__((section(".dflash_code"))) 复制粘贴到给定源文件中的每个函数。

有没有办法使用#pragma 告诉编译器将该属性应用于源文件中的每个函数?

【问题讨论】:

  • 你昨天已经问过了。从那以后一切都没有改变。
  • @EugeneSh。该问题不涉及使用#pragma
  • 这个问题是关于 GCC 的。这是关于 GCC 中特定的#pragma。

标签: c++ c gcc linker


【解决方案1】:

我认为您不能在源代码中执行此操作,但您可以在目标文件上使用objcopy --rename-section .text=.dflash_code 以获得大致相同的效果。有关如何使用 objcopy 的更多建议,请参阅 GNU Binutils manual

【讨论】:

  • 谢谢,我会试试的。我还想使用链接器命令but my attempts are unsuccessful 让它工作。你知道为什么吗?
  • @Adrian 对不起,据我所知,你在那里尝试的应该有效。除非您愿意向我们展示您的整个链接器脚本,可能还有您的整个 Makefile 以及有关构建环境的更多详细信息,否则我认为没有人能进一步帮助您。跨度>
  • 这是有道理的。如果你的方法在这里有效,它会一样好。
  • 它不起作用:objcopy -I binary --rename-section .text=.dflash_code ..\orig\compile.doj .\compile.doj 给出相同的二进制文件
  • -I binary 告诉 objcopy 将其输入解释为 没有内部结构。试试没有那个。如果它仍然不起作用,我需要确切知道您实际使用的目标文件格式,主机和目标 CPU 和操作系统也会有所帮助。
【解决方案2】:

也许它不会使您免于在函数声明中包含某些内容,但实际上我更愿意知道特定函数(甚至全部)不在 .text 部分中。我通常#define 更短的,比如

#define DFC __attribute__((section(".dflash_code")))

并在代码中使用它。当我在一段时间后回到代码中时,它也记得我,这个函数在声明中有一些特殊的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 2013-08-23
    • 2012-01-24
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多