问题:Linux 上的 Swift:让第一步工作

我对 swift 完全陌生。它刚刚作为 linux 的开源版本发布,我想尝试一下。这是在 ubuntu 14.04 上。 clang 是根据先决条件安装的。

<Edit>:要求在这里请求 clang 版本 3.6 也在 ubuntu 14.04 上。我首先使用 clang 3.4 尝试了这些第一步,但后来按照链接中的说明更新到 3.6 并重试。同样的结果.</Edit>

我已经下载了https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar。 gz到 ~/Downloads/.安装脚本和 swift 的第一步:

$ cd /tmp
$ tar xf ~/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz 
$ PATH=/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin/:"$PATH"
$ clang++ --version
Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
$ which swift
/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin//swift
$ swift --version
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-unknown-linux-gnu
$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
  1> 1 + 2
opening import file for module 'SwiftShims': No such file or directory
  1>  

根据这个入门指南它应该打印出来

$R0: Int = 3

出了什么问题,我该如何解决?

编辑:尝试手动查找该文件:它显然不包含在安装中:

$ find swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/ | grep -i shims
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/FoundationShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/SwiftStddef.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/module.map
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/UnicodeShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/GlobalObjects.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/HeapObject.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RuntimeShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RefCount.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RuntimeStubs.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/LibcShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/CoreFoundationShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/SwiftStdint.h

编辑:当我尝试swift buildhelloworld 示例时,会产生以下输出:

/tmp/Hello$ swift build
<unknown>:0: error: opening import file for module 'Swift': No such file or directory
swift-build: exit(1): ["/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin/swiftc", "--driver-mode=swift", "-I", "/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/pm", "-L", "/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/pm", "-lPackageDescription", "/tmp/Hello/Package.swift"]

编辑:截至 2015-12-22 的新发现

自从我发布这个问题以来,至少还有两个 swift for linux 的快照已经发布:2015-12-10 和 2015-12-18。我已经尝试过这些,但它们不能解决问题。

此处的邮件列表线程(post 1,post 2,post 3)与此问题大致相同。有人建议在主目录下安装 swift 会有所帮助。在我的情况下它没有帮助,错误信息仍然是一样的。

更有趣的是,该邮件列表线程包含对使用 strace创建的 REPL 错误的分析。将特定的 strace 输出与 REPL 工作的系统的 strace 输出进行比较会很有趣。

编辑:截至 2015 年 12 月 26 日的更多信息:

一个新的 swift 版本已经发布,日期为 2015-12-22。此版本也存在同样的问题。

关于这个问题的另一个线程出现在 swift 邮件列表从这里开始。遇到此问题的用户还在这里发布了strace 输出。

解答

我有同样的问题。事实证明,我添加了 ppa:ubuntu-toolchain-r/test repo 以便在我的 Mint 发行版 (17.2) 上安装 g++-4.9。一旦我清除了存储库并将各种库恢复到原始版本,swift 终于为我工作了。

具体来说,我不得不跑

sudo apt-get install ppa-purge
sudo ppa-purge -d trusty ppa:ubuntu-toolchain-r/test

在清理时,ppa-purge 抱怨为了解决冲突,它必须删除很多在 Ubuntu Trusty 存储库中找不到的软件包(包括真正的核心软件包,如 build-essential、xorg、gcc、x11- xserver-utils...),所以我做了一个记录,并在清除后立即重新安装了这些。只是要非常小心。

我认为安装 g++ 4.9 时覆盖的一些库会造成冲突。我也在全新的 Mint 安装中验证了所有这些。

Logo

更多推荐