cancel
Showing results for 
Search instead for 
Did you mean: 

SPC58ECxx C++ std::string throws linker errors

ajsmart
Associate

I'm working on a state machine for a console application, and I would like to use std::strings in C++, as they are much nicer to work with than C-style strings.

Including the string library does not result in errors, but when I call string objects in the code I start to get errors.  Here's an example of the code I am using:

//const char* output; //No errors in c-style strings std::string(output); //Compiles, but results in linker error switch(mState) { case MAIN_STATE: output = "\r\nmain->"; break; case CAN_STATE: output = "\r\ncan->"; break; case UART_STATE: output = "\r\nuart->"; break; case GPIO_STATE: output = "\r\ngpio->"; break; default: output = "\r\nMAIN->"; break; } //Print(output); //No errors with C-style Strings Print(output.c_str()); //Compiles, but results in linker error

 As I indicated in the code comments, any time I call a function from the <string> library, I get the following linker error:

07:41:57 **** Incremental Build of configuration Default for project ConsoleApp **** make -j28 all Compiling cConsole.cpp Linking build/out.elf c:/spc5studio-6.0/eclipse/plugins/com.st.tools.spc5.tools.gnu.gcc.ppcvle.win32_4.9.4.20200908161514/toolchain/bin/../lib/gcc/powerpc-eabivle/4.9.4/../../../../powerpc-eabivle/lib/e200z4\libc.a(lib_a-abort.o): In function `abort': abort.c:(.text.abort+0x10): undefined reference to `_exit' c:/spc5studio-6.0/eclipse/plugins/com.st.tools.spc5.tools.gnu.gcc.ppcvle.win32_4.9.4.20200908161514/toolchain/bin/../lib/gcc/powerpc-eabivle/4.9.4/../../../../powerpc-eabivle/lib/e200z4\libc.a(lib_a-sbrkr.o): In function `_sbrk_r': sbrkr.c:(.text._sbrk_r+0x1a): undefined reference to `sbrk' c:/spc5studio-6.0/eclipse/plugins/com.st.tools.spc5.tools.gnu.gcc.ppcvle.win32_4.9.4.20200908161514/toolchain/bin/../lib/gcc/powerpc-eabivle/4.9.4/../../../../powerpc-eabivle/lib/e200z4\libc.a(lib_a-signalr.o): In function `_kill_r': signalr.c:(.text._kill_r+0x1c): undefined reference to `kill' c:/spc5studio-6.0/eclipse/plugins/com.st.tools.spc5.tools.gnu.gcc.ppcvle.win32_4.9.4.20200908161514/toolchain/bin/../lib/gcc/powerpc-eabivle/4.9.4/../../../../powerpc-eabivle/lib/e200z4\libc.a(lib_a-signalr.o): In function `_getpid_r': signalr.c:(.text._getpid_r+0x0): undefined reference to `getpid' collect2.exe: error: ld returned 1 exit status make: *** [components/spc58ecxx_platform_component_rla/lib/rsc/rules.mk:164: build/out.elf] Error 1 "make -j28 all" terminated with exit code 2. Build might be incomplete. 07:42:06 Build Failed. 5 errors, 0 warnings. (took 9s.6ms)

 Interestingly, I've also noticed these kinds of errors with other standard C++ Libraries like <array> or <vector>.

These are my current linker settings:

Screenshot 2024-04-19 092256.png

 

 

 

 

 

 

 

 

What do I need to change in my linker settings to get the standard C++ libraries to link/build correctly?

1 ACCEPTED SOLUTION

Accepted Solutions
Erwan YVIN
ST Employee

Yes, it is possible but it is not so easy 

i recommend to follow to create the missing function in your project

Solved: SPC5Studio cannot use the malloc() and free() func... - STMicroelectronics Community

                 Best Regards

                                            Erwan

View solution in original post

1 REPLY 1
Erwan YVIN
ST Employee

Yes, it is possible but it is not so easy 

i recommend to follow to create the missing function in your project

Solved: SPC5Studio cannot use the malloc() and free() func... - STMicroelectronics Community

                 Best Regards

                                            Erwan