Skip to main content
Associate II
January 21, 2026
Solved

system_stm32wb0x.c - dangerous relocation: unsupported relocation

  • January 21, 2026
  • 2 replies
  • 1305 views

Subject: Linker Error: Multiple definitions of BLE assembly modules when using CubeMX v6.16.1 CMake generator on STM32WB09

Environment:

MCU: STM32WB09

CubeMX Version: 6.16.1

Toolchain: CMake / arm-none-eabi-gcc 14.3.1

IDE: VS Code with STM32CubeIDE Extension v3.7.0

Middleware: STM32_BLE (Bluetooth LE Stack)

Description: I am experiencing a linker failure when building a project generated with STM32CubeMX using the CMake toolchain option. While the project compiles and links correctly when using the standard STM32CubeIDE (Eclipse-based) workflow, the CMake-based build in VS Code fails during the linking stage.

The linker reports multiple definitions for several symbols located in the BLE Middleware assembly files. It appears that the same source files are being compiled into different targets and then linked together, causing collisions.

Key Error Logs:

[main] Building folder: C:/Users/reginaldo.lopes/Desktop/ble_test/build/Debug 
[build] Starting build
[driver] NOTE: You are building with preset Debug, but there are some overrides being applied from your VS Code settings.
[proc] Executing command: cube-cmake --build C:/Users/reginaldo.lopes/Desktop/ble_test/build/Debug --
[build] [0/1] Re-running CMake...
[build] Build type: Debug
[build] -- Configuring done (0.2s)
[build] -- Generating done (0.2s)
[build] -- Build files have been written to: C:/Users/reginaldo.lopes/Desktop/ble_test/build/Debug
[build] [1/69] Building C object CMakeFiles/ble_test.dir/System/Config/Debug_GPIO/app_debug.c.obj
[build] [2/69] Building C object CMakeFiles/ble_test.dir/System/Interfaces/usart_if.c.obj
[build] [3/69] Building C object CMakeFiles/ble_test.dir/STM32_BLE/Target/blenvm.c.obj
[build] [4/69] Building C object CMakeFiles/ble_test.dir/STM32_BLE/App/app_ble.c.obj
[build] [5/69] Building C object CMakeFiles/ble_test.dir/STM32_BLE/Target/bleplat.c.obj
[build] [6/69] Building C object CMakeFiles/ble_test.dir/STM32_BLE/Target/bleplat_cntr.c.obj
[build] [7/69] Building C object CMakeFiles/ble_test.dir/Core/Src/main.c.obj
[build] [8/69] Building C object CMakeFiles/ble_test.dir/Core/Src/radio.c.obj
[build] [9/69] Building C object CMakeFiles/ble_test.dir/Core/Src/pka.c.obj
[build] [10/69] Building C object CMakeFiles/ble_test.dir/Core/Src/gpio.c.obj
[build] [11/69] Building C object CMakeFiles/ble_test.dir/Core/Src/rng.c.obj
[build] [12/69] Building C object CMakeFiles/ble_test.dir/Core/Src/radio_timer.c.obj
[build] [13/69] Building C object CMakeFiles/ble_test.dir/Core/Src/stm32wb0x_hal_msp.c.obj
[build] [14/69] Building C object CMakeFiles/ble_test.dir/Core/Src/sysmem.c.obj
[build] [15/69] Building C object CMakeFiles/ble_test.dir/Core/Src/usart.c.obj
[build] [16/69] Building C object CMakeFiles/ble_test.dir/Core/Src/stm32wb0x_it.c.obj
[build] [17/69] Building C object CMakeFiles/ble_test.dir/Core/Src/app_entry.c.obj
[build] [18/69] Building ASM object CMakeFiles/ble_test.dir/startup_stm32wb09.s.obj
[build] [19/69] Building ASM object CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj
[build] [20/69] Building C object CMakeFiles/ble_test.dir/Core/Src/syscalls.c.obj
[build] [21/69] Building ASM object CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/osal_memcpy.s.obj
[build] [22/69] Building ASM object CMakeFiles/ble_test.dir/Projects/Common/BLE/Startup/cpu_context_switch.s.obj
[build] [23/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rcc.c.obj
[build] [24/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32wb0x.c.obj
[build] [25/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_flash.c.obj
[build] [26/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_flash_ex.c.obj
[build] [27/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rcc_ex.c.obj
[build] [28/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_gpio.c.obj
[build] [29/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pwr.c.obj
[build] [30/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_dma.c.obj
[build] [31/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pwr_ex.c.obj
[build] [32/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_cortex.c.obj
[build] [33/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal.c.obj
[build] [34/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pka.c.obj
[build] [35/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_radio.c.obj
[build] [36/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rng.c.obj
[build] [37/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_radio_timer.c.obj
[build] [38/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_uart.c.obj
[build] [39/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/queued_writes/src/eatt_pwrq.c.obj
[build] [40/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_uart_ex.c.obj
[build] [41/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/evt_handler/src/ble_evt.c.obj
[build] [42/69] Building C object cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/stack/config/ble_stack_user_cfg.c.obj
[build] [43/69] Building C object cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/trace/adv_trace/stm32_adv_trace.c.obj
[build] [44/69] Building ASM object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/cpu_context_switch.s.obj
[build] [45/69] Building C object cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/misc/stm32_mem.c.obj
[build] [46/69] Building C object cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/sequencer/stm32_seq.c.obj
[build] [47/69] Building C object cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/lpm/tiny_lpm/stm32_lpm.c.obj
[build] [48/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/device_context_switch.c.obj
[build] [49/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/NVMDB/Src/nvm_db_conf.c.obj
[build] [50/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Flash/flash_driver.c.obj
[build] [51/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Flash/flash_manager.c.obj
[build] [52/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/PKAMGR/Src/pka_manager.c.obj
[build] [53/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/NVMDB/Src/nvm_db.c.obj
[build] [54/69] Building ASM object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/osal_memcpy.s.obj
[build] [55/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Profiles/Src/gatt_profile.c.obj
[build] [56/69] Building ASM object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj
[build] [57/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Profiles/Src/gap_profile.c.obj
[build] [58/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/RTDebug/RTDebug.c.obj
[build] [59/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/RADIO_utils/Src/RADIO_utils.c.obj
[build] [60/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/osal.c.obj
[build] [61/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/stm_list.c.obj
[build] [62/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/stm32_lpm_if.c.obj
[build] [63/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/miscutil.c.obj
[build] [64/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_rng.c.obj
[build] [65/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_aes.c.obj
[build] [66/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_pka.c.obj
[build] [67/69] Building C object cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/cryptolib_hw_aes.c.obj
[build] [68/69] Linking C executable ble_test.elf
[build] FAILED: [code=1] ble_test.elf 
[build] C:\Windows\system32\cmd.exe /C "cd . && C:\Users\reginaldo.lopes\AppData\Local\stm32cube\bundles\gnu-tools-for-stm32\14.3.1+st.2\bin\arm-none-eabi-gcc.exe -mcpu=cortex-m0plus -Wall -fdata-sections -ffunction-sections -O0 -g3 -mcpu=cortex-m0plus -T "C:/Users/reginaldo.lopes/Desktop/ble_test/stm32wb09_flash.ld" --specs=nano.specs -Wl,-Map=ble_test.map -Wl,--gc-sections -Wl,--print-memory-usage cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32wb0x.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rcc.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rcc_ex.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_flash.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_flash_ex.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_gpio.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_dma.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pwr.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pwr_ex.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_cortex.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_pka.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_radio.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_radio_timer.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_rng.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_uart.c.obj cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Drivers/STM32WB0x_HAL_Driver/Src/stm32wb0x_hal_uart_ex.c.obj cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/evt_handler/src/ble_evt.c.obj cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/queued_writes/src/eatt_pwrq.c.obj cmake/stm32cubemx/CMakeFiles/STM32_BLE.dir/__/__/Middlewares/ST/STM32_BLE/stack/config/ble_stack_user_cfg.c.obj cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/trace/adv_trace/stm32_adv_trace.c.obj cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/misc/stm32_mem.c.obj cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/sequencer/stm32_seq.c.obj cmake/stm32cubemx/CMakeFiles/Utilities.dir/__/__/Utilities/lpm/tiny_lpm/stm32_lpm.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/cpu_context_switch.s.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/device_context_switch.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Flash/flash_manager.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Flash/flash_driver.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/NVMDB/Src/nvm_db_conf.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/NVMDB/Src/nvm_db.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/PKAMGR/Src/pka_manager.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Profiles/Src/gatt_profile.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/Profiles/Src/gap_profile.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/RADIO_utils/Src/RADIO_utils.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/RTDebug/RTDebug.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/osal_memcpy.s.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/stm_list.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/osal.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/miscutil.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/stm32_lpm_if.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_rng.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_pka.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/hw_aes.c.obj cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Interfaces/cryptolib_hw_aes.c.obj CMakeFiles/ble_test.dir/STM32_BLE/App/app_ble.c.obj CMakeFiles/ble_test.dir/STM32_BLE/Target/blenvm.c.obj CMakeFiles/ble_test.dir/STM32_BLE/Target/bleplat.c.obj CMakeFiles/ble_test.dir/STM32_BLE/Target/bleplat_cntr.c.obj CMakeFiles/ble_test.dir/System/Config/Debug_GPIO/app_debug.c.obj CMakeFiles/ble_test.dir/System/Interfaces/usart_if.c.obj CMakeFiles/ble_test.dir/Core/Src/main.c.obj CMakeFiles/ble_test.dir/Core/Src/gpio.c.obj CMakeFiles/ble_test.dir/Core/Src/pka.c.obj CMakeFiles/ble_test.dir/Core/Src/radio.c.obj CMakeFiles/ble_test.dir/Core/Src/radio_timer.c.obj CMakeFiles/ble_test.dir/Core/Src/rng.c.obj CMakeFiles/ble_test.dir/Core/Src/app_entry.c.obj CMakeFiles/ble_test.dir/Core/Src/usart.c.obj CMakeFiles/ble_test.dir/Core/Src/stm32wb0x_it.c.obj CMakeFiles/ble_test.dir/Core/Src/stm32wb0x_hal_msp.c.obj CMakeFiles/ble_test.dir/Core/Src/sysmem.c.obj CMakeFiles/ble_test.dir/Core/Src/syscalls.c.obj CMakeFiles/ble_test.dir/startup_stm32wb09.s.obj CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/osal_memcpy.s.obj CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj CMakeFiles/ble_test.dir/Projects/Common/BLE/Startup/cpu_context_switch.s.obj -o ble_test.elf -LC:/Users/reginaldo.lopes/Desktop/ble_test/cmake/stm32cubemx/../../Middlewares/ST/STM32_BLE/cryptolib -LC:/Users/reginaldo.lopes/Desktop/ble_test/cmake/stm32cubemx/../../Middlewares/ST/STM32_BLE/stack/lib -l:libcrypto.a -l:stm32wb0x_ble_stack.a -lm && cd ."
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/osal_memcpy.s.obj: in function `Osal_MemCpy':
[build] C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Modules/osal_memcpy.s:29: multiple definition of `Osal_MemCpy'; cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/osal_memcpy.s.obj:C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Modules/osal_memcpy.s:29: first defined here
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/ble_test.dir/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj: in function `blue_unit_conversion':
[build] C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Modules/blue_unit_conversion.s:40: multiple definition of `blue_unit_conversion'; cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Modules/blue_unit_conversion.s.obj:C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Modules/blue_unit_conversion.s:40: first defined here
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/ble_test.dir/Projects/Common/BLE/Startup/cpu_context_switch.s.obj: in function `CPUcontextSave':
[build] C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Startup/cpu_context_switch.s:41: multiple definition of `CPUcontextSave'; cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/cpu_context_switch.s.obj:C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Startup/cpu_context_switch.s:41: first defined here
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/ble_test.dir/Projects/Common/BLE/Startup/cpu_context_switch.s.obj: in function `CPUcontextRestore':
[build] C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Startup/cpu_context_switch.s:75: multiple definition of `CPUcontextRestore'; cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/cpu_context_switch.s.obj:C:/Users/reginaldo.lopes/Desktop/ble_test/Projects/Common/BLE/Startup/cpu_context_switch.s:75: first defined here
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: warning: C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/thumb/v6-m/nofp/crtn.o: missing .note.GNU-stack section implies executable stack
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
[build] C:/Users/reginaldo.lopes/AppData/Local/stm32cube/bundles/gnu-tools-for-stm32/14.3.1+st.2/bin/../lib/gcc/arm-none-eabi/14.3.1/../../../../arm-none-eabi/bin/ld.exe: cmake/stm32cubemx/CMakeFiles/Common.dir/__/__/Projects/Common/BLE/Startup/cpu_context_switch.s.obj(CPUcontextRestore): Unknown destination type (ARM/Thumb) in cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32wb0x.c.obj
[build] cmake/stm32cubemx/CMakeFiles/STM32_Drivers.dir/__/__/Core/Src/system_stm32wb0x.c.obj: in function `SystemInit':
[build] C:/Users/reginaldo.lopes/Desktop/ble_test/Core/Src/system_stm32wb0x.c:208:(.text.SystemInit+0x26): dangerous relocation: unsupported relocation
[build] Memory region Used Size Region Size %age Used
[build] RAM: 64 KB 64 KB 100.00%
[build] FLASH: 120112 B 508 KB 23.09%
[build] REGION_NVM: 0 B 4 KB 0.00%
[build] REGION_ROM: 0 B 6 KB 0.00%
[build] collect2.exe: error: ld returned 1 exit status
[proc] The command: cube-cmake --build C:/Users/reginaldo.lopes/Desktop/ble_test/build/Debug -- exited with code: 1
[build] ninja: build stopped: subcommand failed.
[driver] Build completed: 00:00:19.529
[build] Build finished with exit code 1

Observations: The build log shows that files like osal_memcpy.s, blue_unit_conversion.s, and cpu_context_switch.s are being compiled twice:

Once as part of the main project target (CMakeFiles/ble_test.dir/...).

Once as part of the Common target within the auto-generated CubeMX CMake directory (cmake/stm32cubemx/CMakeFiles/Common.dir/...).

Additionally, I am seeing a dangerous relocation: unsupported relocation error in system_stm32wb0x.c during SystemInit, which is likely a side effect of the inconsistent object linking caused by the duplicated assembly symbols.

Request: Is this a known bug in the CubeMX v6.16.1 CMake template for the WB series? Are there any recommended adjustments to the CMakeLists.txt or the .ioc configuration to prevent the generator from creating these redundant source entries?

 

 

Best answer by Mahmoud Ben Romdhane

Hello @rlopes @vrxiaojie 

Issue is fixed in the latest STM32CubeMX release 6.17.0.

You can get it through this link.

Thanks

Mahmoud

2 replies

rlopesAuthor
Associate II
January 21, 2026

@@Mahmoud Ben Romdhane can you help me on this?

Technical Moderator
January 23, 2026

Hello @rlopes 

Let me thank you for posting.

I am currently investigating this behavior, and I will get back to you ASAP.

Thanks.

Mahmoud

 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
Technical Moderator
January 23, 2026

Hello @rlopes 

I reproduced your behavior using STM32CubeMX 6.16.1 and GNU 13.3.but I did not get dangerous relocation error.

Could you please reproduce the test with GNU 13.3.1, knowing that you should add this flag on -z noexecstack on gcc-arm-none-eabi.cmake.

MahmoudBenRomdhane_0-1769174390437.png

To further the investigation, I also need the compilation console.

 

Thanks.

Mahmoud

 

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
Explorer
February 3, 2026

I found a temporary solution to avoid this error.

in cmake/stm32cubemx/CmakeLists.txt, delete these.

vrxiaojie_0-1770106230045.png

However I have to delete these again after code generation from CubeMX. 

 

Technical Moderator
February 25, 2026

Hello @rlopes @vrxiaojie 

Issue is fixed in the latest STM32CubeMX release 6.17.0.

You can get it through this link.

Thanks

Mahmoud

To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.