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
download.developer.apple.com 的链接做了防盗链处理,需要登录后再点击链接下载。