在 ESP32 中编译 FreeType 失败,fterror.h 宏即使已经包含也无法工作

问题描述 投票:0回答:1

我使用默认的 makefile 将 FreeType 编译到 Windows PC,程序运行良好。但是,当我尝试创建自己的 cmakelists.txt 将 FreeType 编译到 ESP32 环境时,许多 FreeType 库 .c 文件显示相同的错误,它是 fterror.h 中定义的宏无法被编译器预处理器识别。 由于同样的东西在 Windows PC 中编译成功,并且我跟踪包含它确实已经在那些 freetype 库 .c 文件中包含了 fterror.h,但是编译器无法识别这一点并且仍然给出错误。缺少 fterror.h 宏,则如下结果无法将 FT_ERR_PREFIX 替换为 FT_Err_,然后导致这么多错误。 请帮助我如何解决这个问题?

[2/200] Building C object esp-idf/freetype2/CMakeFiles/__idf_freetype2.dir/base/ftbdf.c.obj

FAILED: esp-idf/freetype2/CMakeFiles/__idf_freetype2.dir/base/ftbdf.c.obj 

ccache C:\Users\CKan\.espressif\tools\xtensa-esp32s3-elf\esp-12.2.0_20230208\xtensa-esp32s3-elf\bin\xtensa-esp32s3-elf-gcc.exe -DESP_PLATFORM -DIDF_VER=\"v5.1-dirty\" -DSOC_MMU_PAGE_SIZE=CONFIG_MMU_PAGE_SIZE -D_GNU_SOURCE -D_POSIX_READER_WRITER_LOCKS -IC:/Projects/tgesp32/build/config -IC:/Projects/tgesp32/components/freetype2/include -IC:/Projects/tgesp32/components/freetype2/include/freetype -IC:/Projects/tgesp32/components/freetype2/include/freetype/config -IC:/Projects/tgesp32/components/freetype2/include/freetype/internal -IC:/Projects/tgesp32/components/freetype2/include/freetype/internal/services -IC:/Projects/tgesp32/components/freetype2/include/dlg -IC:/Users/CKan/esp/esp-idf/components/newlib/platform_include -IC:/Users/CKan/esp/esp-idf/components/freertos/FreeRTOS-Kernel/include -IC:/Users/CKan/esp/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/include -IC:/Users/CKan/esp/esp-idf/components/freertos/esp_additions/include/freertos -IC:/Users/CKan/esp/esp-idf/components/freertos/esp_additions/include -IC:/Users/CKan/esp/esp-idf/components/freertos/esp_additions/arch/xtensa/include -IC:/Users/CKan/esp/esp-idf/components/esp_hw_support/include -IC:/Users/CKan/esp/esp-idf/components/esp_hw_support/include/soc -IC:/Users/CKan/esp/esp-idf/components/esp_hw_support/include/soc/esp32s3 -IC:/Users/CKan/esp/esp-idf/components/esp_hw_support/port/esp32s3/. -IC:/Users/CKan/esp/esp-idf/components/esp_hw_support/port/esp32s3/private_include -IC:/Users/CKan/esp/esp-idf/components/heap/include -IC:/Users/CKan/esp/esp-idf/components/log/include -IC:/Users/CKan/esp/esp-idf/components/soc/include -IC:/Users/CKan/esp/esp-idf/components/soc/esp32s3 -IC:/Users/CKan/esp/esp-idf/components/soc/esp32s3/include -IC:/Users/CKan/esp/esp-idf/components/hal/esp32s3/include -IC:/Users/CKan/esp/esp-idf/components/hal/include -IC:/Users/CKan/esp/esp-idf/components/hal/platform_port/include -IC:/Users/CKan/esp/esp-idf/components/esp_rom/include -IC:/Users/CKan/esp/esp-idf/components/esp_rom/include/esp32s3 -IC:/Users/CKan/esp/esp-idf/components/esp_rom/esp32s3 -IC:/Users/CKan/esp/esp-idf/components/esp_common/include -IC:/Users/CKan/esp/esp-idf/components/esp_system/include -IC:/Users/CKan/esp/esp-idf/components/esp_system/port/soc -IC:/Users/CKan/esp/esp-idf/components/esp_system/port/include/private -IC:/Users/CKan/esp/esp-idf/components/xtensa/include -IC:/Users/CKan/esp/esp-idf/components/xtensa/esp32s3/include -IC:/Users/CKan/esp/esp-idf/components/lwip/include -IC:/Users/CKan/esp/esp-idf/components/lwip/include/apps -IC:/Users/CKan/esp/esp-idf/components/lwip/include/apps/sntp -IC:/Users/CKan/esp/esp-idf/components/lwip/lwip/src/include -IC:/Users/CKan/esp/esp-idf/components/lwip/port/include -IC:/Users/CKan/esp/esp-idf/components/lwip/port/freertos/include -IC:/Users/CKan./esp/esp-idf/components/lwip/port/esp32xx/include -IC:/Users/CKan./esp/esp-idf/components/lwip/port/esp32xx/include/arch -mlongcalls  -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=unused-but-set-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -Og -fmacro-prefix-map=C:/Projects/tgesp32=. -fmacro-prefix-map=C:/Users/CKan./esp/esp-idf=/IDF -fstrict-volatile-bitfields -fno-jump-tables -fno-tree-switch-conversion -DconfigENABLE_FREERTOS_DEBUG_OCDAWARE=1 -std=gnu17 -Wno-old-style-declaration -MD -MT esp-idf/freetype2/CMakeFiles/__idf_freetype2.dir/base/ftbdf.c.obj -MF esp-idf\freetype2\CMakeFiles\__idf_freetype2.dir\base\ftbdf.c.obj.d -o esp-idf/freetype2/CMakeFiles/__idf_freetype2.dir/base/ftbdf.c.obj -c C:/Projects/tgesp32/components/freetype2/base/ftbdf.c

In file included from C:/Projects/tgesp32/components/freetype2/include/freetype/freetype.h:25,
                 from C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:30,
                 from C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:19:
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c: In function 'FT_Get_BDF_Charset_ID':
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:36: error: 'FT_ERR_PREFIXInvalid_Face_Handle' undeclared (first use in this function); did you mean 'FT_Err_Invalid_Face_Handle'?
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                                    ^~~~~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/fttypes.h:596:30: note: in definition of macro 'FT_ERR_XCAT'
  596 | #define FT_ERR_XCAT( x, y )  x ## y
      |                              ^
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:24: note: in expansion of macro 'FT_ERR_CAT'
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                        ^~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:44:14: note: in expansion of macro 'FT_THROW'
   44 |       return FT_THROW( Invalid_Face_Handle );
      |              ^~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:36: note: each undeclared identifier is reported only once for each function it appears in
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                                    ^~~~~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/fttypes.h:596:30: note: in definition of macro 'FT_ERR_XCAT'
  596 | #define FT_ERR_XCAT( x, y )  x ## y
      |                              ^
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:24: note: in expansion of macro 'FT_ERR_CAT'
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                        ^~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:44:14: note: in expansion of macro 'FT_THROW'
   44 |       return FT_THROW( Invalid_Face_Handle );
      |              ^~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:36: error: 'FT_ERR_PREFIXInvalid_Argument' undeclared (first use in this function); did you mean 'FT_Err_Invalid_Argument'?
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                                    ^~~~~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/fttypes.h:596:30: note: in definition of macro 'FT_ERR_XCAT'
  596 | #define FT_ERR_XCAT( x, y )  x ## y
      |                              ^
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:24: note: in expansion of macro 'FT_ERR_CAT'
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                        ^~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:51:15: note: in expansion of macro 'FT_THROW'
   51 |       error = FT_THROW( Invalid_Argument );
      |               ^~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c: In function 'FT_Get_BDF_Property':
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:36: error: 'FT_ERR_PREFIXInvalid_Face_Handle' undeclared (first use in this function); did you mean 'FT_Err_Invalid_Face_Handle'?
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                                    ^~~~~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/fttypes.h:596:30: note: in definition of macro 'FT_ERR_XCAT'
  596 | #define FT_ERR_XCAT( x, y )  x ## y
      |                              ^
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:24: note: in expansion of macro 'FT_ERR_CAT'
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                        ^~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:76:14: note: in expansion of macro 'FT_THROW'
   76 |       return FT_THROW( Invalid_Face_Handle );
      |              ^~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:36: error: 'FT_ERR_PREFIXInvalid_Argument' undeclared (first use in this function); did you mean 'FT_Err_Invalid_Argument'?
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                                    ^~~~~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/include/freetype/fttypes.h:596:30: note: in definition of macro 'FT_ERR_XCAT'
  596 | #define FT_ERR_XCAT( x, y )  x ## y
      |                              ^
C:/Projects/tgesp32/components/freetype2/include/freetype/internal/ftdebug.h:329:24: note: in expansion of macro 'FT_ERR_CAT'
  329 | #define FT_THROW( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
      |                        ^~~~~~~~~~
C:/Projects/tgesp32/components/freetype2/base/ftbdf.c:79:14: note: in expansion of macro 'FT_THROW'
   79 |       return FT_THROW( Invalid_Argument );
      |              ^~~~~~~~

仍然没有找到解决方案:( 将尝试查看默认的 makefile 以查看它可以工作的任何提示

c esp32 freetype2
1个回答
0
投票

我找到了解决编译过程中这个预处理错误的方法:

fterror.h
中,
FT_ERR_PREFIX
被定义为
FT_Err_
,但在标头末尾,如果未定义
FT2_BUILD_LIBRARY
,则取消定义它。

因此,我需要定义此宏,以便通过向 CMakelists.txt 添加以下内容来防止

FT_ERR_PREFIX
未定义:

add_definitions(-DFT2_BUILD_LIBRARY)
© www.soinside.com 2019 - 2024. All rights reserved.