2019-08-06 7:58 AM
I copy-pasted my library folder containing .cpp and .h files to the project root folder and added the include directories to both Include Paths in GCC and G++ compiler settings. But still when I'm trying to build the project, I get "undefined reference error" which indicates that my library source files are not getting built (or linked). I've changed the main.c to main.cpp as my library is in C++.
What am I doing wring?
2019-08-06 8:05 AM
With C++ you will need to be aware of name mangling, and use extern "C" when interfacing with C code, or mixing things up.
>>I get "undefined reference error" ..
To what specifically?
C++ is also going to have a lot more rigour when it comes to coding style, parameter types, and enums.
When mixing in C files, you might have to change file options to compile as C++, or manage the interfaces as indicated above.
2019-08-07 9:55 PM
Thank you for your answer.
The fact is, I didn't have any problem to build the same project in other IDEs and I'm aware of name mingling and language linkage as well as other paradigms used in C++. I don't really think the problem is from my code.
>> To what specifically?
To every object usage in my main.cpp:
09:06:30 **** Build of configuration Debug for project milkmeter ****
make -j4 all
arm-none-eabi-gcc -mcpu=cortex-m3 -g3 -c -x assembler-with-cpp --specs=nano.specs -mfloat-abi=soft -mthumb -o "Startup/startup_stm32f103retx.o" "../Startup/startup_stm32f103retx.s"
arm-none-eabi-g++ "../Src/main.cpp"
arm-none-eabi-gcc "../Src/stm32f1xx_hal_msp.c"
arm-none-eabi-gcc "../Src/stm32f1xx_it.c"
arm-none-eabi-gcc "../Src/syscalls.c"
arm-none-eabi-gcc "../Src/sysmem.c"
arm-none-eabi-gcc "../Src/system_stm32f1xx.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_adc_ex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_cortex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_dma.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_exti.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_flash_ex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio_ex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pwr.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_rcc_ex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_tim_ex.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_exti.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_gpio.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_rcc.c"
arm-none-eabi-gcc "../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_utils.c"
arm-none-eabi-g++ -o "milkmeter.elf" @"objects.list" -mcpu=cortex-m3 -T"C:\Users\M.J\STM32CubeIDE\workspace_1.0.2\milkmeter\STM32F103RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="milkmeter.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -Wl,--start-group -lc -lm -lstdc++ -lsupc++ -Wl,--end-group
Src/main.o: In function `main':
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:100: undefined reference to `glcd::Init(glcd_device_mode)'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:101: undefined reference to `gText::SelectFont(unsigned char const*, unsigned char, unsigned char (*)(unsigned char const*))'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:102: undefined reference to `gText::Printf(char const*, ...)'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:107: undefined reference to `gText::CursorTo(unsigned char, unsigned char)'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:108: undefined reference to `gText::Printf(char const*, ...)'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:107: undefined reference to `GLCD'
C:/Users/M.J/STM32CubeIDE/workspace_1.0.2/milkmeter/Debug/../Src/main.cpp:107: undefined reference to `ReadPgmData(unsigned char const*)'
collect2.exe: error: ld returned 1 exit status
make: *** [makefile:56: milkmeter.elf] Error 1
"make -j4 all" terminated with exit code 2. Build might be incomplete.
09:06:37 Build Failed. 8 errors, 0 warnings. (took 6s.995ms)
My build log (which I removed some redundant build options) clearly shows that none of my library source files are getting built. Can it be that my library source files are .cpp?
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.