问题 如何在使用GCC编译的C文件中指定输出节?


在汇编语言中,我使用.section指令告诉汇编程序输出到哪个部分

.section init

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


4972
2018-01-21 07:42


起源

与此问题类似: stackoverflow.com/questions/3516398/...。 - Matthew Iselin


答案:


有:

__attribute__((section("section_name")))

所以,例如:

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

....

void foo() {}

会放置 foo 在 .text_foo

看到 这里 了解更多信息。


15
2018-01-21 07:50



谢谢,但这只是一个功能。我想要一些与完整的C文件相同的东西 - binW
提示:您可以使用宏来降低它的难度。 - Artelius
@binW:坦率地说,最好的方法是使用链接描述文件。从GCC文档:“如果您需要将模块的全部内容映射到特定部分,请考虑使用链接器的设施。” (gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Variable-Attributes.html) - Matthew Iselin
我有同样的愿望。但是使用 属性 即使用宏也很烦人。容易忘记一些静态变量。它可能没有因为一个常量被优化掉或突然中断,因为它不再内联一个函数。 - Goswin von Brederlow
使用链接器是好的,但我想在代码中的概念!有没有办法通过代码注释设置整个模块部分? - Tomer W