TouchGFX undefined reference to `touchgfx::HAL::blockCopy(void*, void const*, unsigned int)' ——记一次arm-none-eabi-g++ 链接时找不到静态库中对应的函数,学习GNU C++的符号改编机制

TouchGFX undefined reference to `touchgfx::HAL::blockCopy(void*, void const*, unsigned int)'

——记一次arm-none-eabi-g++ 链接时找不到静态库中对应的函数,学习GNU C++的符号改编机制

摘要:本文首先介绍TouchGFX的特性及使用方法,然后用TouchGFX Designer生成一个demo工程,该工程可以在PC环境模拟运行。工程生成的代码,分别在IAR、KEIL MDK-ARM、gcc命令行等环境下编译,生成的HEX文件可以在实体开发板正确运行。将生成的代码摘出来,参照gcc的命令行编译,移植到我所用的操作系统中,我所用系统采用CMake组织、gcc编译,编译阶段无误,链接阶段报找不到静态库中的函数实现。TouchGFX引擎的核心代码不开源,以静态库方式提供,编译时需要链此库。分析后得知,该静态库编译时将uint32_t定义为unsigned long,而我所用系统将uint32_t定义为unsigned int。GNU C++在函数的符号改编时,将函数的参数也作为改编的一部分,这样两者编译时就是不同的函数符号表,我所编译出来的函数符号,在静态库中确实找不到实现。最后在我所用操作系统中,将uint32_t定义为unsigned long,编译链接成功,问题得以解决。

关键字:TouchGFX;libtouchgfx.a;g++链接静态库;C++符号改编

 

posted on 2022-03-07 15:38  wangyw  阅读(291)  评论(0编辑  收藏  举报

导航