Difference between revisions of "C++ Support in Embedded Studio"

From SEGGER Wiki
Jump to: navigation, search
(Created page with "This article will show how C++ libraries can be enabled in Embedded Studio so you can use C++ library functions in your application. ==How to== For this guide Embedded Studio...")
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
  +
__TOC__
This article will show how C++ libraries can be enabled in Embedded Studio so you can use C++ library functions in your application.
 
   
  +
Embedded Studio supports application development in C and C++.
==How to==
 
  +
Its C runtime library, based on emRun, provides all fundamentals, tweaked for fastest speed or smallest size.
For this guide Embedded Studio V5.60 or later is required. For older versions see the legacy steps below.
 
  +
In addition, the C++ library provides all required features for efficient C++ applications.
The library is based on the libcxx's embedded subset.
 
   
  +
The C++ library adds:
* Open the package manager under Tools->Package Manager
 
* Select the ARM libcxx Library Package [Common] and select install
 
** For RISCV the RISCV common package respectively
 
* Press Next, Next to start the installation
 
* Now either create a new project or use your existing one
 
* Open the project options and under Libraries->libcxx Library select Yes
 
* You should now get a prompt that will try to install additional libraries for your particular project setup, here select yes and install the additional package
 
* Now you should be able to include the library headers in your source file e.g. #include <cstring> and use the library functions
 
   
  +
* C++ header files to wrap up their C equivalents. e.g. cmath to math.h.
  +
* C++-specific names and functions and mangled names for math.h. e.g. classification (isinf) and comparison (isless) functions, and cosf to cos(float) / cos to cos(double).
  +
* C++ header files for exception, new, typeinfo.
  +
* C++ unwinding library. Functions used for target unwinding, such as to implement exceptions.
  +
* The C++ ABI library. Low-level support for standard C++ libraries.
  +
* The C++ standard library.
   
  +
This article describes how to enable the C++ libraries in Embedded Studio to use C++ library functions in target applications.
==Legacy STLport==
 
  +
For older Embedded Studio versions the libcxx library is not available. Instead use the STLport from the package manager and project options.
 
  +
== How to use the C++ Library ==
The installation steps are the same as above.
 
  +
''Note: For libcxx, Embedded Studio V5.60 or later is required.''
  +
  +
The C++ standard library is based on the embedded C++ subset of the [https://libcxx.llvm.org "libc++" C++ Standard Library.]
  +
  +
To limit download and installation size of Embedded Studio, the library is supplied as additional packages for the supported target architectures.
  +
To enable the library in a project, only the common package needs to be installed.
  +
Embedded Studio takes care of downloading the specific packages if required.
  +
  +
* Open the package manager under Tools -> Package Manager...
  +
* Select the "ARM libcxx Library Package [Common]" or "RISCV libcxx Library Package [Common]" for installation.
  +
[[File:Cpp_Package_Manager.PNG|thumb|Package Manager|none]]
  +
* Optional: Select the specific libcxx Library Packages for your target architecture(s) for installation.
  +
** 'If not done, Embedded Studio will download the specific package for your project. See next steps.'
  +
* Press Next to continue the download and installation.
  +
  +
The library is now ready to use and can be enabled in new and existing projects.
  +
  +
* Open or create a project.
  +
* Option the project options and go to Code -> Libraries.
  +
* In "libcxx Library" select "Yes" or "Yes (No Exceptions)".
  +
[[File:Cpp_Project_Option.png|thumb|Project Options|none]]
  +
* Press OK to save the project options.
  +
* If the specific package for your project has not been installed, yet, Embedded Studio prompts to download and install the package now.
  +
** Press Yes.
  +
** Press Next to continue the download and installation.
  +
[[File:Cpp_Additional_Pack.png|thumb|Package Prompt|none]]
  +
  +
The project is now configured to use the C++ standard library.
  +
Include the necessary headers and start using the library functions.
  +
  +
== Enabling Exception Support ==
  +
  +
To enable exception support in your C++ project the following must be considered:
  +
* Make sure your library is installed as explained above. (Project option libcxx Library = Yes)
  +
* Set project option "Enable Exception Support" to Yes.
  +
* Make sure that sections readonly and readexec are placed in your linker script.
  +
  +
== Changing the C++ standard ==
  +
Per default C++ support is set to gnu++98. If you are using more modern features of C++ make sure to change the standard to the respective version in project options under Code->Compiler->C++ Language Standard

Revision as of 11:02, 9 January 2023

Embedded Studio supports application development in C and C++. Its C runtime library, based on emRun, provides all fundamentals, tweaked for fastest speed or smallest size. In addition, the C++ library provides all required features for efficient C++ applications.

The C++ library adds:

  • C++ header files to wrap up their C equivalents. e.g. cmath to math.h.
  • C++-specific names and functions and mangled names for math.h. e.g. classification (isinf) and comparison (isless) functions, and cosf to cos(float) / cos to cos(double).
  • C++ header files for exception, new, typeinfo.
  • C++ unwinding library. Functions used for target unwinding, such as to implement exceptions.
  • The C++ ABI library. Low-level support for standard C++ libraries.
  • The C++ standard library.

This article describes how to enable the C++ libraries in Embedded Studio to use C++ library functions in target applications.

How to use the C++ Library

Note: For libcxx, Embedded Studio V5.60 or later is required.

The C++ standard library is based on the embedded C++ subset of the "libc++" C++ Standard Library.

To limit download and installation size of Embedded Studio, the library is supplied as additional packages for the supported target architectures. To enable the library in a project, only the common package needs to be installed. Embedded Studio takes care of downloading the specific packages if required.

  • Open the package manager under Tools -> Package Manager...
  • Select the "ARM libcxx Library Package [Common]" or "RISCV libcxx Library Package [Common]" for installation.
Package Manager
  • Optional: Select the specific libcxx Library Packages for your target architecture(s) for installation.
    • 'If not done, Embedded Studio will download the specific package for your project. See next steps.'
  • Press Next to continue the download and installation.

The library is now ready to use and can be enabled in new and existing projects.

  • Open or create a project.
  • Option the project options and go to Code -> Libraries.
  • In "libcxx Library" select "Yes" or "Yes (No Exceptions)".
Project Options
  • Press OK to save the project options.
  • If the specific package for your project has not been installed, yet, Embedded Studio prompts to download and install the package now.
    • Press Yes.
    • Press Next to continue the download and installation.
Package Prompt

The project is now configured to use the C++ standard library. Include the necessary headers and start using the library functions.

Enabling Exception Support

To enable exception support in your C++ project the following must be considered:

  • Make sure your library is installed as explained above. (Project option libcxx Library = Yes)
  • Set project option "Enable Exception Support" to Yes.
  • Make sure that sections readonly and readexec are placed in your linker script.

Changing the C++ standard

Per default C++ support is set to gnu++98. If you are using more modern features of C++ make sure to change the standard to the respective version in project options under Code->Compiler->C++ Language Standard