1. 查询嵌入式设备标准库中所支持的版本:
命令:strings libstdc++.so.6.0.22|grep GLIBCXX*
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动态库):
分析原因:ls运行过程依赖于标准C库;
解决问题:更新标准C库(注意:嵌入式设备端 ‘libc.so.6’ 是个软链接,不能先删除,直接链接)。
- 只替换标准C和标准C++库,系统固件不能正常运行
问题表现现象(启动提示段错误):
原因分析:缺少系统运行依赖文件(或者缺少标准库运行的依赖程序),不能正常运行
解决方法:将交叉编译工具链 libc 中的库全部替换到嵌入式设备端lib目录下。
- tar 解压软连接文件的时候,出现报错:“tar: can not create symlink,operation not permitted”
原因分析:如果打包的文件系统和解压的文件系统不一致,则会出现以上的异常(可能是打包命令带参的问题);
解决方法:使用 zip 命令重新打包,然后放在嵌入式设备端重新解压,解压正常,不报这个异常错误;