• 编译 | 更新标准库_交叉编译工具链


    1. 查询嵌入式设备标准库中所支持的版本:

    命令:strings libstdc++.so.6.0.22|grep GLIBCXX*
    avatar

    2. 更新编译交叉工具链需要注意的点(从低版本更新到高版本):

    • 使用同一个交叉编译工具链 编译系统、小工具、固件;
    • 更新系统的时候需要同步替换完整包中的小工具;
    • 同步更新完整包中的标准库(标准C、C++等库),提高标准 GLIBC 和 GLIBCXX 支持的版本;

    (最好直接拷贝交叉编译工具链目录 ‘arm-linux-guneabihf/libc/lib/’ 下的全部库文件,替换嵌入式设备中的lib库,整个过程需要保持文件的软链接关系);

    • 拷贝软链接的时候需要 先打包再解包,才能保持软链接依赖关系;
    • 新版本的交叉编译工具链中支持的高版本标准库是 向下兼容 的。

    3. 更新遇到的问题:

    • 运行程序的时候提示报错:“/lib/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found.”

    原因分析:标准C++库版本太低;
    解决方法:更新标准C++库版本;

    • 删除掉标准C库 ‘libc.so.6’, ls 等linux命令无法使用;

    问题表现现象(提示没有标准C动态库):
    avatar
    分析原因:ls运行过程依赖于标准C库;
    解决问题:更新标准C库(注意:嵌入式设备端 ‘libc.so.6’ 是个软链接,不能先删除,直接链接)。

    • 只替换标准C和标准C++库,系统固件不能正常运行

    问题表现现象(启动提示段错误):
    avatar
    原因分析:缺少系统运行依赖文件(或者缺少标准库运行的依赖程序),不能正常运行
    解决方法:将交叉编译工具链 libc 中的库全部替换到嵌入式设备端lib目录下。

    • tar 解压软连接文件的时候,出现报错:“tar: can not create symlink,operation not permitted”

    原因分析:如果打包的文件系统和解压的文件系统不一致,则会出现以上的异常(可能是打包命令带参的问题);
    解决方法:使用 zip 命令重新打包,然后放在嵌入式设备端重新解压,解压正常,不报这个异常错误;

  • 相关阅读:
    Qt 单元测试
    用gcov来检查Qt C++程序的代码覆盖率
    QT .pro文件中的变量说明
    ubuntu 14.04 升级到18.04
    VMware虚拟机中调整Linux分区大小——使用GParted
    JSoup 用法详解
    java内存分配
    Java常量定义需要注意的两点
    java中的容器解释
    JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
  • 原文地址:https://www.cnblogs.com/CristL/p/14249903.html
Copyright © 2020-2023  润新知