Skip to main content
OLync.1
Associate III
Jun 7, 2024 5:18 AM UTC
Solved

TouchGfx 4.24 linker problem

I have just upgraded my project from TouchGfx 4.22 and on rebuild I get:

(.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x31c): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x328): undefined reference to `touchgfx::paint::rgb565::lineFromARGB8888(unsigned short*, unsigned long const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x4c6): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x4d2): undefined reference to `touchgfx::paint::rgb565::lineFromARGB8888(unsigned short*, unsigned long const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x504): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x510): undefined reference to `touchgfx::paint::rgb565::lineFromARGB8888(unsigned short*, unsigned long const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI16blitCopyARGB8888EPKhRKNS_4RectES6_h+0x566): undefined reference to `touchgfx::paint::tearDown()'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: Middlewares/ST/touchgfx/lib/core/cortex_m4f/gcc\libtouchgfx.a(LCD16bpp.o): in function `touchgfx::LCD16bpp::DecompressorRGB_QOI::blitCopyRGB565(unsigned char const*, touchgfx::Rect const&, touchgfx::Rect const&, unsigned char)':

(.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x480): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x48c): undefined reference to `touchgfx::paint::rgb565::lineFromRGB565(unsigned short*, unsigned short const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x538): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x544): undefined reference to `touchgfx::paint::rgb565::lineFromRGB565(unsigned short*, unsigned short const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x594): undefined reference to `touchgfx::paint::flushLine(unsigned long*, int)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x5a0): undefined reference to `touchgfx::paint::rgb565::lineFromRGB565(unsigned short*, unsigned short const*, unsigned int, unsigned char)'

C:/ST/STM32CubeIDE_1.11.0/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.12.3.rel1.win32_1.0.100.202403111256/tools/bin/../lib/gcc/arm-none-eabi/12.3.1/../../../../arm-none-eabi/bin/ld.exe: (.text._ZN8touchgfx8LCD16bpp19DecompressorRGB_QOI14blitCopyRGB565EPKhRKNS_4RectES6_h+0x5fa): undefined reference to `touchgfx::paint::tearDown()'

 

I followed advice elsewhere and regenerated code from CubeMX before regenerating from TouchGfx designer, with same result.

 

For this error:

undefined reference to `touchgfx::paint::rgb565::lineFromRGB565(unsigned short*, unsigned short const*, unsigned int, unsigned char) 

There is an implementation in PaintRGB565Impl.hpp:

void lineFromRGB565(uint16_t* const ptr, const uint16_t* const data, const unsigned count, const uint8_t alpha)

 

CubeMX v6.11.1

TouchGfx: v4.24.0

CubeIDE: v1.15.1 Build: 21094_20240412_1041 (UTC)

This topic has been closed for replies.
OLync.1
OLync.1Best answer
Associate III
Jun 14, 2024 5:08 AM UTC

I now have a successful build. I needed to manually import TouchGfx 4.24 zip into MX (Embedded Software Packages Manager -> From Local...) and then update the selection to 4.24 (Software Packs Component Selector) and then regenerate the code. Maybe this is documented somewhere but it's certainly not intuitive and hard to navigate when done infrequently.

21 replies

Visitor II
Apr 15, 2025 11:02 PM UTC

I built it with sucess by: 1st) uncheck "LCD16bpp" into "Framework Features" on "Config" (gear icon) of TouchGFXDesigner software;

2nd) Regenerate the code in TouchGFXDesigner and......finally

3rd) Build Project into stm32CubeIDE..

rogeda_0-1744757803599.png