I'm trying to integrate the TinyUSB library within an MCUXpresso project but I'm running into an issue when when I try to call the tusb_init() function. I get the following error, which appears to be associated with the linker:
Building target: MKL25Z4_Project_TinyUSB_v6.axf
Invoking: MCU Linker
arm-none-eabi-gcc -nostdlib -L"/Users/drsmith/Documents/MCUXpressoIDE_11.8.1_1197/workspace/MKL25Z4_Project_TinyUSB_v6/tinyusb/src" -Xlinker -Map="MKL25Z4_Project_TinyUSB_v6.map" -Xlinker --gc-sections -Xlinker -print-memory-usage -Xlinker --sort-section=alignment -Xlinker --cref -mcpu=cortex-m0plus -mthumb -T MKL25Z4_Project_TinyUSB_v6_Debug.ld -o "MKL25Z4_Project_TinyUSB_v6.axf" ./utilities/fsl_debug_console.o ./tinyusb/src/device/usbd.o ./tinyusb/src/device/usbd_control.o ./tinyusb/src/common/tusb_fifo.o ./tinyusb/src/class/video/video_device.o ./tinyusb/src/class/vendor/vendor_device.o ./tinyusb/src/class/vendor/vendor_host.o ./tinyusb/src/class/usbtmc/usbtmc_device.o ./tinyusb/src/class/net/ecm_rndis_device.o ./tinyusb/src/class/net/ncm_device.o ./tinyusb/src/class/msc/msc_device.o ./tinyusb/src/class/msc/msc_host.o ./tinyusb/src/class/midi/midi_device.o ./tinyusb/src/class/hid/hid_device.o ./tinyusb/src/class/hid/hid_host.o ./tinyusb/src/class/dfu/dfu_device.o ./tinyusb/src/class/dfu/dfu_rt_device.o ./tinyusb/src/class/cdc/cdc_device.o ./tinyusb/src/class/cdc/cdc_host.o ./tinyusb/src/class/cdc/cdc_rndis_host.o ./tinyusb/src/class/bth/bth_device.o ./tinyusb/src/class/audio/audio_device.o ./tinyusb/src/tusb.o ./startup/startup_mkl25z4.o ./source/MKL25Z4_Project_TinyUSB_v6.o ./source/mtb.o ./source/semihost_hardfault.o ./drivers/fsl_clock.o ./drivers/fsl_common.o ./drivers/fsl_flash.o ./drivers/fsl_gpio.o ./drivers/fsl_lpsci.o ./drivers/fsl_smc.o ./drivers/fsl_uart.o ./board/board.o ./board/clock_config.o ./board/peripherals.o ./board/pin_mux.o ./CMSIS/system_MKL25Z4.o
/Applications/MCUXpressoIDE_11.8.1_1197/ide/plugins/com.nxp.mcuxpresso.tools.macosx_11.8.1.202308071233/tools/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/bin/ld: ./source/MKL25Z4_Project_TinyUSB_v6.o: in function `main':
/Users/drsmith/Documents/MCUXpressoIDE_11.8.1_1197/workspace/MKL25Z4_Project_TinyUSB_v6/Debug/../source/MKL25Z4_Project_TinyUSB_v6.c:43: undefined reference to `tusb_init'
I've placed all the .c and .h files for TinyUSB within its own folder inside the workspace. And I've included the subfolders for the TinyUSB header and source files within Settings -> C/C++ General -> Paths and Symbols
But I'm struggling to figure out how to ensure that the linker find functions like tusb_init(). What's the preferred way to define paths for the linker in MCUXpresso?
thanks!
James
Vielen Dank, Erich!
The compiler is creating the tusb.o object file:
And that object file comes from tusb.h and tusb.c (where tusb_init() is defined):
I saw your post about exclusion earlier and made sure that the exclusion check box was not checked.
and I looked at the alternative that you suggested and it seems to be on the default (assuming that means include in build)
all the best,
James
Hi James,
what about the folder properties where the file is in?
Maybe the folder is not included into the build?
Erich
Hi James,
the linker error is about the fact that it does not find the function tusb_init(). Check your sources and find out where this function is located, and if the module for it (.o) is listed in the ones passed to the linker.
It could be that you have missed including/compiling that file or folder for it. Make sure the file or folder is not 'excluded from build', see https://mcuoneclipse.com/2014/07/22/exclude-source-files-from-build-in-eclipse/
I hope this helps,
Erich
Hi Erich,
still working on it... now putting all the files from TinyUSB into the main source folder... just to narrow down possible issues. Now going to check linker folder lists...
Aha. I believe that I've figured it out. It had nothing to do with MCUXpresso's settings. They were fine. What was going on is that the TinyUSB library uses preprocessor defines in a configuration file that are then interpreted to include (or not) the header file.
Once I defined it properly, the linker was able to find the resulting object file.
James