【问题标题】:How do I specify output sections in C files compiled using GCC?如何在使用 GCC 编译的 C 文件中指定输出部分?
【发布时间】:2011-06-12 23:48:22
【问题描述】:

在汇编语言中,我使用 .section 指令告诉汇编器要输出到哪个部分,例如

.section init

有没有办法在 C 文件中做同样的事情。我希望某些文件的代码进入不同的部分,以便我可以将其加载到不同的内存地址。我知道我可以为 ld 创建一个脚本并在那里指定部分,但我不想这样做。对于 C 文件,是否有一些编译器开关或 .section 指令之类的东西可以做到这一点?

【问题讨论】:

标签: c gcc ld


【解决方案1】:

有:

__attribute__((section("section_name")))

所以,例如:

void foo() __attribute__((section(".text_foo")));

....

void foo() {}

foo 放入.text_foo

更多信息请参见here

【讨论】:

  • 谢谢,但这仅适用于一项功能。我想要一些与完整 C 文件相同的东西
  • 提示:您可以使用宏使其不那么难看。
  • @binW:坦率地说,最好的方法是使用链接描述文件。来自 GCC 文档:“如果您需要将模块的全部内容映射到特定部分,请考虑使用链接器的工具。” (gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Variable-Attributes.html)
  • 我也有同样的愿望。但是即使使用宏也使用 attribute 是很烦人的。容易忘记一些静态变量。它可能会在没有的情况下工作,因为常量被优化掉或突然中断,因为它不再内联函数。
  • 使用链接器很好,但我想要代码中的概念!有没有办法通过代码注释设置整个模块部分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多