2026-04-29 6:34 AM
I have installed version 13.3.rel1, clean the files and re compile the code :
I have a linker error "undefined reference" to a function although the function referenced in the files and declared in the H file who was included.
"
C:/ST/STM32CubeIDE_2.0.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld.exe: ./Core/Src/stm32u0xx_hal_msp.o: in function `HAL_PCD_MspInit':
C:/Users/../Electronics/../Software/USB_CDC_U0/USB_CDC_U0/Debug/../Core/Src/stm32u0xx_hal_msp.c:102:(.text.HAL_PCD_MspInit+0x4c): undefined reference to `MX_USB_CDC_Init'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:65: USB_CDC_U0.elf] Error 1
"make -j12 all" terminated with exit code 2. Build might be incomplete.
15:33:51 Build Failed. 2 errors, 0 warnings. (took 13s.995ms)
I have tried the following:
1. I have tried changing the file order in "path and symbols" clean and recompile - no success
2. I have tried changing the function name - - no success
3. I have deleted the object files in the debug section clean the code and re-compile - no success.
currently I am using version 13.3.rel1 of STM32 GNU and CubeIDE 2.1.1 tools downgraded from version 14.3.rel1 due to other errors encountered while compiling the code - see the link below:
I have attached the code
Please help
UVC100
Solved! Go to Solution.
2026-05-03 11:48 PM
Hi Andrew ,
Thank you for light me the way ,
The code in the USB directory was not compiled, although it was part of the software ,
All the code must be placed under the core directory , otherwise it will not be recognized, compiled or linked
thank you
UVC100
2026-04-29 6:49 AM
Are you sure that the source file containing the definition (not just the prototype) of MX_USB_CDC_Init is actually included in the build?
Does the CubeIDE 'Go To Definition' find it?
2026-04-29 11:58 PM
Hi Andrew,
In the last test I done , I change the name of function, thought the name is to long , it has no effect the on the result - same linker error.
Please see below the text from the updated function name :
"C:/ST/STM32CubeIDE_2.0.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.100.202509120712/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld.exe: ./Core/Src/stm32u0xx_hal_msp.o: in function `HAL_PCD_MspInit':
C:/Users/../Hardware - General/../../Software/USB_CDC_U0/USB_CDC_U0/4c): undefiDebug/../Core/Src/stm32u0xx_hal_msp.c:102:(.text.HAL_PCD_MspInit+0xned reference to `MX_USB_INIT'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:65: USB_CDC_U0.elf] Error 1
"make -j12 all" terminated with exit code 2. Build might be incomplete."
The function current name is :MX_USB_INIT()
the function located in the USB_CDC_IF.c file (see attached code)
the function Exported in the in the USB_CDC_IF.h
call to the function done in the STM32U0xx_hal_msp.c within the function HAL_PCD_MspInit()
USB_CDC_IF.h was included in the STM32U0xx_hal_msp.c file
Thank you
2026-04-30 2:26 AM
@UVC100 wrote:the function located in the USB_CDC_IF.c file (see attached code)
And are you sure that file is actually being built ?
2026-05-03 11:48 PM
Hi Andrew ,
Thank you for light me the way ,
The code in the USB directory was not compiled, although it was part of the software ,
All the code must be placed under the core directory , otherwise it will not be recognized, compiled or linked
thank you
UVC100
2026-05-05 3:03 AM
Glad to hear it's now fixed!
But note that this is not true:
@UVC100 wrote:All the code must be placed under the core directory , otherwise it will not be recognized, compiled or linked
It certainly is possible to have code outside the 'Core' folder which does get included in the build.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.