1974bec8bf | ||
---|---|---|
.. | ||
README.md | ||
SConscript | ||
crt.cpp | ||
crt.h | ||
crt_init.c |
README.md
C++ support for RT-Thread
This is the C++ component in RT-Thread RTOS. In order to support C++ language, this component implement a basic environment, such as new/delete operators.
Because RT-Thread RTOS is used in embedded system mostly, there are some rules for C++ applications:
- DOES NOT use exception.
- DOES NOT use Run-Time Type Information (RTTI).
- Template is discouraged and it easily causes code text large.
- Static class variables are discouraged. The time and place to call their constructor function could not be precisely controlled and make multi-threaded programming a nightmare.
- Multiple inheritance is strongly discouraged, as it can cause intolerable confusion.
NOTE: The libc must be enable.
About GNU GCC compiler
please add following string in your ld link script: // in your .text section PROVIDE(ctors_start = .); /* old GCC version uses .ctors / KEEP((SORT(.ctors.))) KEEP((.ctors)) /* new GCC version uses .init_array / KEEP ((SORT(.init_array.))) KEEP ((.init_array)) PROVIDE(ctors_end = .);
. = ALIGN(4);
// as a standalone section if you use ARM target.
/* The .ARM.exidx section is used for C++ exception handling. */
/* .ARM.exidx is sorted, so has to go in its own output section. */
__exidx_start = .;
.ARM.exidx :
{
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
/* This is used by the startup in order to initialize the .data secion */
_sidata = .;
} > CODE
__exidx_end = .;
/* .data section which is used for initialized data */
// in your .data section PROVIDE(dtors_start = .); KEEP((SORT(.dtors.))) KEEP(*(.dtors)) PROVIDE(dtors_end = .);
. = ALIGN(4);