我有一些带有非空构造函数的全局实例的简单声明。这些构造函数在启动期间自动调用。我在 Linux 上将 C++ 交叉编译到不同的微控制器目标。
至于
- arm-none-eabi-gcc-4.8.4
- rx-elf-gcc-4.8-GNURX_v14.03 (GCC 4.8.3)
对构造函数的调用被放入该.init_array
部分。地图文件如下所示:
.init_array 0x00007cb8 0x4 libmotor.o
.init_array 0x00007cbc 0x4 libaudio.o
至于
- mips-elf-gcc-4.8.2
- avr-gcc-4.8.1
- msp430-gcc-4.6.3
这些调用进入该.ctors
部分:
.ctors 0x000000009d011508 0x4 libmotor.o
.ctors 0x000000009d01150c 0x4 libaudio.o
编译完成-ffunction-sections -fdata-sections
,链接器得到--gc-sections
.
所有二进制文件都有效,但我想将所有调用放在同一部分(以简化链接器脚本的维护)。
- 为什么有不同的目标部分?
- 是否可以使用命令行选项更改默认部分?
- 如果命令行选项不退出:是否可以在 GCC 编译时定义默认部分?