Swift 5 静态编译

Nov 17, 2021 • 预计阅读时间 1 分钟

Swift 是支持静态链接的,因为它是跨平台的语言。参考这里:Static linking on Linux

静态链接的好处就是不需要带 Swift 的一堆 Runtime 库,在 build 的时候增加 -static-stdlib 就可以了。

但是如果在最新的版本(Swift 5.5.1)上静态编译,会得到一个错误信息:

$ swift build -Xswiftc -static-stdlib

error: -static-stdlib is no longer supported for Apple platforms

在苹果平台(iOS、macOS、tvOS、watchOS)都不再支持静态链接了。

carthage 提供有 standalone 的版本,说明它静态链接的,看一下如何实现:

...

SWIFT_STATIC_STDLIB_SHOULD_BE_FLAGGED:=$(shell test -d $$(dirname $$(xcrun --find swift))/../lib/swift_static/macosx && echo should_be_flagged)
ifeq ($(SWIFT_STATIC_STDLIB_SHOULD_BE_FLAGGED), should_be_flagged)
SWIFT_BUILD_FLAGS+= -Xswiftc -static-stdlib
endif

...

如果存在 lib/swift_static 目录,就可以静态链接。

swift.org 上翻历史版本的 release 安装包,发现从 5.2 开始就不再支持静态链接了。

最后支持静态链接的版本是 5.1.5

https://download.swift.org/swift-5.1.5-release/xcode/swift-5.1.5-RELEASE/swift-5.1.5-RELEASE-osx.pkg

Xcode 中,11.3.1 是最后一个支持 Swift 静态编译的版本,内置的 Swift 版本是 5.1.3

https://download.developer.apple.com/Developer_Tools/Xcode_11.3.1/Xcode_11.3.1.xip

安装完整的 Xcode 太大了,可以只安装 Command Line Tools for Xcode 11.3.1

https://download.developer.apple.com/Developer_Tools/Command_Line_Tools_for_Xcode_11.3.1/Command_Line_Tools_for_Xcode_11.3.1.dmg

download.developer.apple.com 的链接做了防盗链处理,需要登录后再点击链接下载。

Swift
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

SwiftUI 入门指南