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

bin*_*inW 12 c gcc ld

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

.section init
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*lin 16

有:

__attribute__((section("section_name")))
Run Code Online (Sandbox Code Playgroud)

所以,例如:

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

....

void foo() {}
Run Code Online (Sandbox Code Playgroud)

将放置foo.text_foo

有关更多信息,请参见此处

  • @binW:坦率地说,最好的方法是使用链接描述文件.从GCC文档:"如果您需要将模块的全部内容映射到特定部分,请考虑使用链接器的设施." (http://gcc.gnu.org/onlinedocs/gcc-4.4.5/gcc/Variable-Attributes.html) (2认同)
  • 我有同样的愿望.但即使使用宏,使用__attribute__也很烦人.容易忘记一些静态变量.它可能没有因为一个常量被优化掉或突然中断,因为它不再内联一个函数. (2认同)