• 4361阅读
  • 5回复

关于Qt几百个版本无法兼容的深度思考 [复制链接]

上一主题 下一主题
离线liudianwu
 

只看楼主 倒序阅读 楼主  发表于: 2021-07-01

关于Qt众多版本(至少几百个)都不兼容的问题,在经过和Qt中国的林斌大神和其他大神(Qt非官方技术交流群)头脑风暴以后,最终得出以下的结论。
- Qt在二进制兼容这块,已经做了最大的努力,通过将各种代码细节隐藏,Q指针+D指针技巧,尽量保持了接口的统一;
- 是否兼容最主要考虑编译器的因素,毕竟任何Qt版本都是需要通过编译器编译成对应的二进制文件,由他说了算。如果两个Qt版本采用的编译器版本一样,极大概率可执行文件是兼容的,比如 Qt5.10+msvc2015 32 位 和 Qt5.11+msvc2015 32位 编译出来的可执行文件,都用Qt5.11的库是可行的;
- mingw编译器的Qt版本也是如此,就是因为Qt官方安装包集成的mingw编译器一直在更新(极少附近版本没有更新mingw编译器版本除外),比如5.7用的mingw53,5.12用的mingw73,5.15用的mingw81,因为带的Qt库也是这个编译器编译出来的,所以导致看起来全部不兼容;
- 如果想要完全兼容,还有一个注意要素,那就是对应代码使用的类的头文件接口是否变了,按道理原有的接口极少会变,一般都是新增加,或者大版本才会改变,比如Qt4-Qt5-Qt6这种肯定没法兼容的,接口和模块都变了;
- 大胆的猜测:如果Qt5.6到Qt5.15你全部用一种编译器比如mingw73或者msvc2015重新编译生成对应的Qt运行库,然后在此基础上开发程序,最后生成的可执行文件用Qt5.15的库是都可以的,这样就轻松跨越了多个版本兼容;
- 大胆的建议:在附近的几个版本统一编译器,比如5.6-5.12之间就统一用mingw53或者msvc2015,5.12-5.15统一用msvc2017,要尝鲜其他编译器的可以自行源码编译其他版本,这样最起码附近的一大段版本(大概2-3年的版本周期)默认就兼容了。
- 本人测试的是widget部分,qml未做测试,不清楚是否机制一样;
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2021-07-01
20091001753 贡献值 +1 - 2021-07-01
20091001753 威望 +1 - 2021-07-01
20091001753 金钱 +10 - 2021-07-01
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线liulin188

只看该作者 1楼 发表于: 2021-07-01
楼主谈谈qml的看法
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线snow_man_0

只看该作者 2楼 发表于: 2021-07-01
实际上,小版本之间有存在接口的变化。追求完全兼容,会限制接口变化、加大开发难度,我是觉得没有必要
离线uidab

只看该作者 3楼 发表于: 2021-07-02
    
彻底兼容不容易,因此我们都是直接统一版本。不考虑太多,或者直接给代码,让他自己编译。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!

只看该作者 4楼 发表于: 2021-07-09
版本兼容搞死人
离线kenbe

只看该作者 5楼 发表于: 2021-07-10
这个问题一直困扰软件开发人员,并且接口一直不变也是很难做到。
快速回复
限100 字节
 
上一个 下一个