【问题标题】:Can the Swift compiler create a single executable for my application?Swift 编译器可以为我的应用程序创建一个可执行文件吗?
【发布时间】:2021-02-03 22:43:24
【问题描述】:

我目前正在尝试为我的 Vapor 应用程序创建一个可执行文件,但我无法在我的服务器上运行它。

我的期望是它能够使用我的所有代码和依赖项创建一个应用程序。我目前的参考是 .NET 和 Go,您可以在其中从代码创建单个可执行文件并部署此独立文件 - 这使得部署非常简单。

我尝试在 Docker 上编译和执行它,但没有这样的运气 - 它失败了,因为缺少一些 libSwift。

那么,Swift 可以做这样的事情吗?

期待您的回答

【问题讨论】:

  • 您是否在终端中尝试过“swiftc”?在这样的提示下使用:swiftc fileName.swift -o myExecutable
  • 是的,您可以只部署一个可执行的 swift 二进制文件,但它应该在将执行它的环境中完全编译,因为它希望在编译期间准确找到它们链接的所有依赖项。因此,为编译创建一个 docker 映像,然后为执行创建相同的映像,并在执行之前安装 swift.org 上列出的所有需要​​的环境/依赖项
  • 好的,这是有道理的,但是 Go 和 .NET 二进制文件实际上是独立的。它们具有零外部依赖性,因为不需要在生成的二进制文件之外查找任何文件。是否可以在 Swift 中制作类似的东西?

标签: swift vapor


【解决方案1】:

您可以构建一个静态链接标准库的二进制文件,或者使用 Swift 5.3.1 - -static-stdlib-static-executable 中引入的静态链接标志构建一个完全自包含的二进制文件。详情请见this forum post

请注意,swift 仍然对 ICU 和 libc 有一些依赖,因此还不能完全移植

【讨论】:

  • 错误:Apple 平台不再支持 -static-stdlib :(
  • 你不能为苹果平台构建它,因为操作系统附带了 Swift。它只适用于 Linux 和 windows
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多