gcc版本对c++11的支持情况
表 2 不同GCC版本支持的C++编译标准
GCC 版本 | C++常用标准 | |||||||
---|---|---|---|---|---|---|---|---|
C++98/03 | C++11 | C++14 | C++17 | GNU++98 | GNU++11 | GNU++14 | GNU++17 | |
10.1 ~ 8.4 | c++98/c++03 | c++11 | c++14 | c++17 | gnu++98/gnu++03 | gnu++11 | gnu++14 | gnu++17 |
7.5 ~ 5.5 | c++98/c++03 | c++11 | c++14 | c++1z(部分支持) | gnu++98/gnu++03 | gnu++11 | gnu++14 | gnu++1z(部分支持) |
4.9.4 ~ 4.8.5 | c++98/c++03 | c++11 | c++1y(部分支持) | gnu++98/gnu++03 | gnu++11 | gnu++1y(部分支持) | ||
4.7.4 | c++98 | c++11(部分支持) | gnu++98 | gnu++11(部分支持) | ||||
4.6.4 | c++98 | c++0x(部分支持) | gnu++98 | gnu++0x(部分支持) | ||||
4.5.4 | c++98 | c++0x(部分支持) | gnu++98 | gnu++0x(部分支持) |
|
参考:
http://c.biancheng.net/view/8053.html
--------qemu
一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。
二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
简单理解就是硬直通 和软翻译(不用考虑了)
参考:
https://blog.csdn.net/qq_33745102/article/details/116860287
https://blog.csdn.net/hunanchenxingyu/article/details/43230229
--------cmake-arm交叉构建
参考:https://zhuanlan.zhihu.com/p/100367053
1、生成一个arm.cmake文件 设置编译器为arm交叉gcc/g++工具链
2、cmake -DCMAKE_TOOLCHAIN_FILE= path/CrossCompile.cmake src-path 生成标准unixmakefiles文件
3、make all -j 4构建
如果构建OS gcc版本太低 可以选择自己编译高版本的gcc 但这预估会有更大的工作量
首先要确定项目在x86下最编译器版本的最小依赖 根据这个最小闭环版本去开展工作 目标版本和原始版本差距越小适配的工作量越少
第一 系统版本能不能调 第二才接下来才是目标版本gcc构建 目标arm交叉工具链的构建
高版本gcc 会依赖更高版本的各种库甚至是glibc库
这种网状依赖工作量在x86、arm架构下工作会在一定时间内闭环
但是在新架构体系或者说不成熟的架构会逐渐发散到不可收敛 怎么办
聚焦核心包 选择兼容版本 app层面撤掉某些编译器新支持功能等手段
当然最重要的就是长期战斗 闭环一个一个包构建出来 运行起来 没有捷径