How to prevent inclusion of C library destructors and atexit()?

后端 未结 4 1597
梦谈多话
梦谈多话 2021-02-13 21:20

Using arm-none-eabi-gcc for Cortex-M4 (baremetal application), the code for malloc is also emitted even though I never use malloc in my code.

S

4条回答
  •  梦毁少年i
    2021-02-13 22:15

    In an environment with limited memory such as the Cortex M4, another option is to use newlib-nano. It provides a __register_exitproc() that is weakly linked. Therefore it is easy to override with your own empty function that avoids calling malloc(). This will have the additional benefit of removing __call_exitprocs() from your binary as well.

    • Add the flag --specs=nano.specs to your compiler and linker options.
    • Create the following function somewhere in your compiled code: void __register_exitproc(void) { }

    Note that this will prevent destructors being called for static instances of classes. This seems appropriate in your example.

    See the comments in the newlib source for more details.

提交回复
热议问题