cancel
Showing results for 
Search instead for 
Did you mean: 

STM32CubeIDE 2.X.X Seems to Have -Werror Permanently Enabled

NickFF
Associate II

I have five projects on the go, which compile and debug well on STM32CubeIDE 1.X.X (at least for 1.12.0+), but with warnings. I am now trying to shift to more recent versions of CubeIDE (2.X.X), but they behave as if ">Properties>C/C++Build>Settings>Tool Settings>MCU>MPU GCC Compiler>Warnings>Treat warnings as errors (-Werror)" is enabled, even when it is not.

I believe that my settings in the more recent CubeIDE are identical to the older one, and I have tested this on two different computers with similar results. The error which is currently causing the compilation to halt is " ...error: implicit declaration of function 'xxxxx' [Wimplicit-function-declaration]", but if I resolve it, another item which should be a (legitimate) 'warning' will appear as an 'error'. I am using "ISO C11 (-std=c11)", and have the same issue if I attempt to use GNU11.

Unfortunately, I cannot resolve all the warnings without creating other problems, so this issue is preventing me from being able to upgrade my active CubeIDE install. I suspect there is a Workspace setting somewhere that I can't find, but it's nowhere obvious, and -Werrror is not mentioned in the project makefile. Any assistance would be appreciated.

6 REPLIES 6
TDK
Super User

I don't see that behavior. Projects with warnings compile fine.

Screenshot 2026-03-17 224827.png

Copy the output of the "Console" tab after trying to build and paste it here, preferably in a code sample </> format.

I don't see how project build errors would prevent you from upgrading STM32CubeIDE.

 

If you feel a post has answered your question, please click "Accept as Solution".
NickFF
Associate II

Here is a snippet (I cut out a few hundred lines from the middle) of the console output with the missing 'stdio.h' include triggering the error:

13:29:49 **** Clean-only build of configuration DBGcfg for project tester_application ****
make -j6 clean 
rm -rf ./Utilities/JPEG/jpeg_utils.cyclo ./Utilities/JPEG/jpeg_utils.d ./Utilities/JPEG/jpeg_utils.o ./Utilities/JPEG/jpeg_utils.su
rm -rf ./Submodules/zlib/adler32.cyclo ./Submodules/zlib/adler32.d ./Submodules/zlib/adler32.o ./Submodules/zlib/adler32.su ./Submodules/zlib/zutil.cyclo ./Submodules/zlib/zutil.d ./Submodules/zlib/zutil.o ./Submodules/zlib/zutil.su
rm -rf ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth.cyclo ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth.d ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth.o ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth.su ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth_ex.cyclo ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth_ex.d ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth_ex.o ./Submodules/stm32h7xx-hal-driver/Src/Legacy/stm32h7xx_hal_eth_ex.su
[...]
arm-none-eabi-gcc "../Submodules/USBX/common/core/src/ux_utility_unicode_to_string.c" -mcpu=cortex-m7 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32H743xx -DTX_INCLUDE_USER_DEFINE_FILE -DGX_INCLUDE_USER_DEFINE_FILE -DFX_INCLUDE_USER_DEFINE_FILE -DLX_INCLUDE_USER_DEFINE_FILE -DUX_INCLUDE_USER_DEFINE_FILE -DIHFC_INCLUDE_USER_DEFINE_FILE -DSTM32_THREAD_SAFE_STRATEGY=3 -DLANGUAGE_DEFAULT=LANGUAGE_ENGLISH '-DPRODUCT_NAME_STRING="DBGcfg"' '-DFIRMWARE_RELEASE_ID=""' '-DRELEASE_BRANCH_FLAG=(sizeof(FIRMWARE_RELEASE_ID) != sizeof(""))' '-DFIRMWARE_NAME_STRING="DBGcfg 200"' -DUSE_PWR_LDO_SUPPLY -c -I../Application -I../Application/BSP -I../Application/DAQ -I../Application/GUIX_project/Outputs -I../Application/GUIX_user -I../DeviceX_extended/DeviceX/chaos-pp/chaos -I../DeviceX_extended/DeviceX/drivers -I../DeviceX_extended/DeviceX -I../DeviceX_extended/DeviceX_DAQ -I../Submodules/CleftStick -I../Submodules/CMSIS-DSP/Include -I../Submodules/CMSIS-DSP/Include/dsp -I../Submodules/CMSIS-DSP/PrivateInclude -I../Submodules/EEPROM_Emulation -I../Submodules/FileX/common/inc -I../Submodules/FileX/ports/cortex_m7/gnu/inc -I../Submodules/FileX_extended -I../Submodules/GTC_Utilities -I../Submodules/GUIX/common/inc -I../Submodules/GUIX/ports/cortex_m7/gnu/inc -I../Submodules/GUIX_extended -I../Submodules/H7_device_drivers -I../Submodules/LevelX/common/inc -I../Submodules/stm32h7xx-hal-driver/Inc -I../Submodules/stm32h7xx-hal-driver/Inc/Legacy -I../Submodules/ThreadX/common/inc -I../Submodules/ThreadX/ports/cortex_m7/gnu/inc -I../Submodules/ThreadX_extended -I../Submodules/TinyPrintf -I../Submodules/USBX/common/core/inc -I../Submodules/USBX/ports/cortex_m7/gnu/inc -I../Submodules/USBX/common/usbx_device_classes/inc -I../Submodules/USBX/common/usbx_stm32_device_controllers -I../Submodules/zlib -I../Submodules/SignalProcessing/ports -I../Submodules/SignalProcessing/fourier_transform_toolbox -I../Submodules/SignalProcessing/iowa_hills_filter_calculator -I../Submodules/SignalProcessing/time_domain_toolbox -I../Submodules/SignalProcessing/OmegaTransformer -I../Submodules/SignalProcessing -I../Core/Inc -I../LIBJPEG/App -I../LIBJPEG/Target -I../Utilities/JPEG -I../Middlewares/Third_Party/LibJPEG/include -I../Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../Drivers/CMSIS/Include -I../Drivers/STM32H7xx_HAL_Driver/Inc -I../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Submodules/USBX/common/core/src/ux_utility_unicode_to_string.d" -MT"Submodules/USBX/common/core/src/ux_utility_unicode_to_string.o" --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -o "Submodules/USBX/common/core/src/ux_utility_unicode_to_string.o"
arm-none-eabi-gcc "../Submodules/USBX/common/core/src/ux_utility_virtual_address.c" -mcpu=cortex-m7 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32H743xx -DTX_INCLUDE_USER_DEFINE_FILE -DGX_INCLUDE_USER_DEFINE_FILE -DFX_INCLUDE_USER_DEFINE_FILE -DLX_INCLUDE_USER_DEFINE_FILE -DUX_INCLUDE_USER_DEFINE_FILE -DIHFC_INCLUDE_USER_DEFINE_FILE -DSTM32_THREAD_SAFE_STRATEGY=3 -DLANGUAGE_DEFAULT=LANGUAGE_ENGLISH '-DPRODUCT_NAME_STRING="DBGcfg"' '-DFIRMWARE_RELEASE_ID=""' '-DRELEASE_BRANCH_FLAG=(sizeof(FIRMWARE_RELEASE_ID) != sizeof(""))' '-DFIRMWARE_NAME_STRING="DBGcfg 200"' -DUSE_PWR_LDO_SUPPLY -c -I../Application -I../Application/BSP -I../Application/DAQ -I../Application/GUIX_project/Outputs -I../Application/GUIX_user -I../DeviceX_extended/DeviceX/chaos-pp/chaos -I../DeviceX_extended/DeviceX/drivers -I../DeviceX_extended/DeviceX -I../DeviceX_extended/DeviceX_DAQ -I../Submodules/CleftStick -I../Submodules/CMSIS-DSP/Include -I../Submodules/CMSIS-DSP/Include/dsp -I../Submodules/CMSIS-DSP/PrivateInclude -I../Submodules/EEPROM_Emulation -I../Submodules/FileX/common/inc -I../Submodules/FileX/ports/cortex_m7/gnu/inc -I../Submodules/FileX_extended -I../Submodules/GTC_Utilities -I../Submodules/GUIX/common/inc -I../Submodules/GUIX/ports/cortex_m7/gnu/inc -I../Submodules/GUIX_extended -I../Submodules/H7_device_drivers -I../Submodules/LevelX/common/inc -I../Submodules/stm32h7xx-hal-driver/Inc -I../Submodules/stm32h7xx-hal-driver/Inc/Legacy -I../Submodules/ThreadX/common/inc -I../Submodules/ThreadX/ports/cortex_m7/gnu/inc -I../Submodules/ThreadX_extended -I../Submodules/TinyPrintf -I../Submodules/USBX/common/core/inc -I../Submodules/USBX/ports/cortex_m7/gnu/inc -I../Submodules/USBX/common/usbx_device_classes/inc -I../Submodules/USBX/common/usbx_stm32_device_controllers -I../Submodules/zlib -I../Submodules/SignalProcessing/ports -I../Submodules/SignalProcessing/fourier_transform_toolbox -I../Submodules/SignalProcessing/iowa_hills_filter_calculator -I../Submodules/SignalProcessing/time_domain_toolbox -I../Submodules/SignalProcessing/OmegaTransformer -I../Submodules/SignalProcessing -I../Core/Inc -I../LIBJPEG/App -I../LIBJPEG/Target -I../Utilities/JPEG -I../Middlewares/Third_Party/LibJPEG/include -I../Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../Drivers/CMSIS/Include -I../Drivers/STM32H7xx_HAL_Driver/Inc -I../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Submodules/USBX/common/core/src/ux_utility_virtual_address.d" -MT"Submodules/USBX/common/core/src/ux_utility_virtual_address.o" --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -o "Submodules/USBX/common/core/src/ux_utility_virtual_address.o"
arm-none-eabi-gcc "../Submodules/TinyPrintf/printf.c" -mcpu=cortex-m7 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32H743xx -DTX_INCLUDE_USER_DEFINE_FILE -DGX_INCLUDE_USER_DEFINE_FILE -DFX_INCLUDE_USER_DEFINE_FILE -DLX_INCLUDE_USER_DEFINE_FILE -DUX_INCLUDE_USER_DEFINE_FILE -DIHFC_INCLUDE_USER_DEFINE_FILE -DSTM32_THREAD_SAFE_STRATEGY=3 -DLANGUAGE_DEFAULT=LANGUAGE_ENGLISH '-DPRODUCT_NAME_STRING="DBGcfg"' '-DFIRMWARE_RELEASE_ID=""' '-DRELEASE_BRANCH_FLAG=(sizeof(FIRMWARE_RELEASE_ID) != sizeof(""))' '-DFIRMWARE_NAME_STRING="DBGcfg 200"' -DUSE_PWR_LDO_SUPPLY -c -I../Application -I../Application/BSP -I../Application/DAQ -I../Application/GUIX_project/Outputs -I../Application/GUIX_user -I../DeviceX_extended/DeviceX/chaos-pp/chaos -I../DeviceX_extended/DeviceX/drivers -I../DeviceX_extended/DeviceX -I../DeviceX_extended/DeviceX_DAQ -I../Submodules/CleftStick -I../Submodules/CMSIS-DSP/Include -I../Submodules/CMSIS-DSP/Include/dsp -I../Submodules/CMSIS-DSP/PrivateInclude -I../Submodules/EEPROM_Emulation -I../Submodules/FileX/common/inc -I../Submodules/FileX/ports/cortex_m7/gnu/inc -I../Submodules/FileX_extended -I../Submodules/GTC_Utilities -I../Submodules/GUIX/common/inc -I../Submodules/GUIX/ports/cortex_m7/gnu/inc -I../Submodules/GUIX_extended -I../Submodules/H7_device_drivers -I../Submodules/LevelX/common/inc -I../Submodules/stm32h7xx-hal-driver/Inc -I../Submodules/stm32h7xx-hal-driver/Inc/Legacy -I../Submodules/ThreadX/common/inc -I../Submodules/ThreadX/ports/cortex_m7/gnu/inc -I../Submodules/ThreadX_extended -I../Submodules/TinyPrintf -I../Submodules/USBX/common/core/inc -I../Submodules/USBX/ports/cortex_m7/gnu/inc -I../Submodules/USBX/common/usbx_device_classes/inc -I../Submodules/USBX/common/usbx_stm32_device_controllers -I../Submodules/zlib -I../Submodules/SignalProcessing/ports -I../Submodules/SignalProcessing/fourier_transform_toolbox -I../Submodules/SignalProcessing/iowa_hills_filter_calculator -I../Submodules/SignalProcessing/time_domain_toolbox -I../Submodules/SignalProcessing/OmegaTransformer -I../Submodules/SignalProcessing -I../Core/Inc -I../LIBJPEG/App -I../LIBJPEG/Target -I../Utilities/JPEG -I../Middlewares/Third_Party/LibJPEG/include -I../Drivers/CMSIS/Device/ST/STM32H7xx/Include -I../Drivers/CMSIS/Include -I../Drivers/STM32H7xx_HAL_Driver/Inc -I../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"Submodules/TinyPrintf/printf.d" -MT"Submodules/TinyPrintf/printf.o" --specs=nano.specs -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -o "Submodules/TinyPrintf/printf.o"
../Submodules/TinyPrintf/printf.c: In function '_out_char':
../Submodules/TinyPrintf/printf.c:155:11: error: implicit declaration of function 'putchar' [-Wimplicit-function-declaration]
  155 |           putchar(character);//_putchar(character);
      |           ^~~~~~~
../Submodules/TinyPrintf/printf.c:120:1: note: include '<stdio.h>' or provide a declaration of 'putchar'
  119 | #include <float.h>
  +++ |+#include <stdio.h>
  120 | #endif
make: *** [Submodules/TinyPrintf/subdir.mk:19: Submodules/TinyPrintf/printf.o] Error 1
make: *** Waiting for unfinished jobs....
"make -j6 all" terminated with exit code 2. Build might be incomplete.

13:31:24 Build Failed. 3 errors, 0 warnings. (took 1m:23s.724ms)

I managed to get around the issue by making two changes:

  1. include <stdio.h>, which fixes the missing declaration issue above
  2. define _DEFAULT_SOURCE symbol, which fixes a missing definition issue in <math.h> 

After making these changes, the project compiles correctly, with a variety of non-standard-library warnings.

I am starting to think that STM32CubeIDE post-2.0.0 either 'escalates' library-related warnings to errors, or indexes libraries differently from how it works with 'project' files.

Almost every CubeIDE update comes with new toolchain (compiler, linker) which of course has various changes.

You can install previous toolchain that was used before the update, and enjoy peace of mind. Update to the new compiler later, whenever you want.

The compiler command line options are visible in the log. If no  -Werrror there - then it is not in effect.

NickFF
Associate II

The issue is that this should not be an error:

[-Wimplicit-function-declaration]

I have worked around it, but it still seems wrong.

TDK
Super User

Implicitly defined functions are invalid as of C99. Not just deprecated, but invalid. That's 27 years ago. I think an error for using a "feature" which was made invalid 27 years ago is reasonable.

Regardless, this isn't a STM32CubeIDE thing, it's a GCC decision, and it has nothing to do with -Werror.

If you feel a post has answered your question, please click "Accept as Solution".
NickFF
Associate II

My read of the GCC warning options is that "-Wimplicit-function-declaration" should be a warning unless -Werror or -pedantic-errors -Wno-error=pedantic are selected. It seems like some people make the case that GCC should not support implicit function declarations, because of the C99 change you mention, but GCC seems to support them.