C++环境支持

DEMO工程

apps/demo/demo_hello

C++环境配置流程

1. 在工程中添加 cxx-runtime.cpp 和 cpp_run_init.c 文件

文件位于 ``apps/common/c++``目录下,需要将cxx-runtime.cpp 和 cpp_run_init.c链入到工程中。

2. 在文件sdk_ld_sdram.c 或 sdk_ld_sfc.c “.test”段和”.bss”段中添加以下段(一般发布的SDK都已经添加)

  • (.text) 的下一行添加 :

    #if defined CONFIG_CXX_SUPPORT
            . = ALIGN(4);
    _ctors_begin = .;
    PROVIDE(ctors_begin = .);
    *(.ctors*)
    _ctors_end = .;
    PROVIDE(ctors_end = .);
            . = ALIGN(4);
    #endif
    

  • 在 } >rom 的下一行添加 :

    #if defined CONFIG_CXX_SUPPORT
        PROVIDE(ctors_count = _ctors_end - _ctors_begin);
    #endif
    

  • 在*(.bss)的下一行添加 :

    #if defined CONFIG_CXX_SUPPORT
        *(.bss.*)
    #endif
    

3. 调用C++代码前需要先用cpp_run_init()对C++环境进行初始化,如:

void app_main()
{
#ifdef CONFIG_CXX_SUPPORT
    //注意:使用时也可以不放置在这里调用,但必须在使用c++前进行调用初始化c++环境
    void cpp_run_init(void);
    cpp_run_init();
#endif
    printf("\r\n\r\n\r\n\r\n\r\n -----------hello demo run %s-------------\r\n\r\n\r\n\r\n\r\n", __TIME__);
    os_task_create(hello_demo_task, NULL, 10, 1000, 0, "hello_demo_task");
}

4. 修改编译配置。(一般发布的SDK都已经添加)

-lstdc++
-fno-exceptions
-fno-rtti

5. 将c++库“cpu/wl82/libstdc++/libcxx.a”添加到工程中。

6. 包含C++头文件路径 “include_lib/c++/” 和 “include_lib/c++/include/”

7. 在app_config.h 中添加定义

#define CONFIG_CXX_SUPPORT