Qt 支持在 Apple M1 上构建

3,585

以下内容来自 Qt 官方博客。原文链接:www.qt.io/blog/qt-on-…

在苹果公司去年宣布通过新的Apple Silicon M1芯片将macOS过渡到arm64时,官方就立即开始在Qt中制作本地支持的原型,最初是在开发者过渡套件(DTK)上,后来一旦有了支持,就是在生产硬件上了。Rosetta翻译层已经解决了在Apple Silicon上运行现有Qt应用程序的问题,但官方希望能用原生的arm64构建,以便利用这个新的芯片组所有的价值。

幸运的是,Qt已经有了很好的交叉编译支持和对arm64的支持,这要归功于iOS移植。所以最初,把Qt带到Apple Silicon上并没有花费太多精力,不过,难就难在细节上。

一个主要的困难是说服构建系统不仅将arm64作为macOS上支持的配置,而且允许一次性为x86_64和arm64构建Qt,产生所谓的通用构建。

另一个是确保所有的第三方依赖,如Chromium、PCRE和OpenSSL都是可用的,并在arm64支持下进行更新。

最后,需要将arm64 macOS添加到CI中,以便能够运行所有的测试。由于缺乏虚拟化选项,这需要一些额外的工作。

现在这些问题都已经解决了,在即将发布的Qt 6.2版本中,将对Apple Silicon提供Qt支持。这包括交叉编译到arm64,以及在苹果硅上开发Qt应用程序。

试用

现在可以通过安装Qt安装程序中的6.2预览版在Apple Silicon上试用Qt了。Qt SDK是完全通用的,应该可以在Intel和Apple Silicon硬件上运行。

也可以查看 Qt 仓库的 6.2 分支,并从源代码构建 Qt。默认情况下,Qt将为你的本地架构构建,即如果你使用的是Intel Mac,则为x86_64,如果你使用的是Apple Silicon Mac,则为arm64。要产生一个通用的构建,需要在configure中添加以下参数。

./configure <other options> -- -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"

一旦有了针对Apple Silicon的Qt构建,就可以像平常一样使用CMake来配置和构建你的应用程序。CMake也默认为针对你的本地架构进行构建,因此要产生你的应用程序的通用构建,需要在配置时添加相同的参数。

cmake ~/src/myapp -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64" 

注意,如果有第三方的依赖,这些也必须被构建为通用的二进制文件。

在Qt Creator中构建和调试

由于Qt Creator仍然是作为一个非通用的二进制文件构建的,所以无论你的机器是哪种架构,它将默认产生x86_64二进制文件。

要为arm64构建,需要在项目构建设置的 "初始CMake参数 "中明确添加-DCMAKE_OSX_ARCHITECTURES=arm64,或者在 qmake的 "附加参数 "栏中 添加QMAKE_APPLE_DEVICE_ARCHS=arm64 。

注意:要附加调试器,你需要对你的应用程序进行x86_64构建。

这些问题将在最终的6.2版本发布前解决。

Qt 5

Qt 5已经拥有了一些补丁,所以Qt 5.15.4及以上版本通过传递-device-option QMAKE_APPLE_DEVICE_ARCHS=arm64 来构建和运行。请注意,这种配置没有在CI中测试,因此目前不支持。

为x86_64构建的应用程序将通过Rosetta翻译层运行。