• TouchGFX undefined reference to `touchgfx::HAL::blockCopy(void*, void const*, unsigned int)' ——记一次armnoneeabig++ 链接时找不到静态库中对应的函数,学习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++符号改编

  • 相关阅读:
    外观模式
    虚拟专用网
    DHCP服务
    NFS文件服务器
    samba服务器
    fatal error: Invalid layout of preloaded class
    ftp上传与下载
    byte与char的区别
    android管理联系人操作
    android图像与图像处理系列(一、Bitmap和BitmapFactory)
  • 原文地址:https://www.cnblogs.com/fozu/p/15976212.html
Copyright © 2020-2023  润新知