關於Qt幾百個版本無法兼容的深度思考

關於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未做測試,不清楚是否機制一樣;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章