Qt5適配M1


 大部分情況下Qt的x86應用程序可以運行於M1的 Rosetta之上,但是當我們基於Qt的應用程序依賴僅僅支持Arm64架構的庫時就無法鏈接通過了.當前時間點為2021年8月份Qt尚未提供支持M1的免費發布版本,Qt 6.2有一個Preview版本支持M1,但普通用戶有使用期限,且Preview版本並不是穩定版用上去有風險.

 

1、編譯M1版本的Qt(5.15.2版本)

    參考 https://www.reddit.com/r/QtFramework/comments/ll58wg/how_to_build_qt_creator_for_macos_arm64_a_guide/ (此網站可能需要fan qiang,第一部分內容主要就是翻譯翻譯)

 

其主要步驟如下:

在M1電腦上(X86電腦相同的編譯選項無法編譯通過)

 安裝必備的工具

            編譯Qt lib需要安裝: brew install pcre2 harfbuzz freetype

            編譯Qt creator需要安裝:

                                      brew install cmake ninja python

                                      brew install --build-from-source llvm

 

下載 Qt 5.15.2的源碼:https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz                                   (.zip的包是windows版本的,不要下載zip的包)

 

解壓此壓縮包,在壓縮包解壓文件夾同一層目錄創建構建目錄:

          mkdir  buildir

然后在同一層目錄下創建編譯目標路徑

          mkdir outDir

進入構建目錄 

       cd  buildir

 

編譯配置

       ../qt-everywhere-src-5.15.2/configure -release -prefix ./outDir -nomake examples -nomake tests QMAKE_APPLE_DEVICE_ARCHS=arm64 -opensource -confirm-license -skip qt3d -skip qtwebengine

 

編譯

       make -j15

安裝

        make install

 

此時在 outDir目錄下就有一套完整的Qt工具集和庫(沒有3D模塊)

 

2、制作universal版Qt

 此時編譯的Qt可以在M1電腦上編譯大部分的工程,但卻無法運行於x86電腦上.為了讓x86電腦上也能編譯運行於arm64版本的Qt,需要將Qt制作成為universal的Qt.

 

 在一台x86的Mac電腦上同步驟1進行安裝工具,編譯Qt等操作,唯一不一樣的是編譯配置,在x86下應該用

      ../qt-everywhere-src-5.15.2/configure -release -prefix ./outDir -nomake examples -nomake tests QMAKE_APPLE_DEVICE_ARCHS=x86_64 -opensource -confirm-license -skip qt3d -skip qtwebengine

 

做成x86版本的Qt后需要將兩個Qt版本合並為universal版Qt,參考 https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary  可以知道用lipo 工具可以將arm與x86程序融合成universal版本程序,Qt的工具集很多,一個一個操作相當費時.

GitHub上有個工具相當方便 https://github.com/nedrysoft/makeuniversal,用makeuniversal工具可以合並兩個文件夾為univerdal.

 

./makeuniversal   ./qt5-mac-universal ./qt5-mac-x86_64  ./qt5-mac-arm64 

其中 qt5-mac-x86_64為之前編譯的x86版本Qt工具與lib集,qt5-mac-arm64 為之前編譯arm64工具與lib集,命令執行成功后 qt5-mac-universal路徑下就是支持兩個平台的Qt工具與lib集 .

 

3、編譯universal 程序

使用上面做成的universal的Qt工具集像往常一樣創建Qt工程,然后在Qt工程配置文件xxx.pro文件里添加一句

  QMAKE_APPLE_DEVICE_ARCHS="x86_64 x86_64h"

即告訴編譯系統要編譯支持兩個平台的app,編譯成功后生成的app就已經支持在兩個平台上運行了.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM