Swift Linux:做第一步工作

我对于迅速是完全陌生的。 它刚刚被释放为Linux的开源,我想试试它。 这是在Ubuntu 14.04。 铛是根据先决条件安装的。

<Edit> : 要求这里要求铿锵的版本3.6也在Ubuntu 14.04上。 我第一次尝试了第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 〜/下载/。 安装和快速的第一步的成绩单:

 $ 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该文件:它显然不包含在安装中:

 $ 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 build helloworld的例子 ,这个输出产生:

 /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日的新发现

自从我发布这个问题以来,至less有两个swift for linux快照已经发布:2015-12-10和2015-12-18。 我已经尝试过这些,但是他们没有解决这个问题。

这个邮件列表线程在这里( 职位1 , 职位2 , 职位3 )是大约相同的问题。 有人build议在主目录下安装swift会有帮助。 这在我的情况下没有帮助,错误信息仍然是一样的。

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

编辑:更多信息截至2015-12-26:

一个新的快速发布,2015年12月22日。 此版本显示相同的问题。

关于这个问题的另一个线索已经出现在从这里开始的快速邮件列表中。 遇到问题的用户也在此处张贴strace输出 。

Solutions Collecting From Web of "Swift Linux:做第一步工作"

我有同样的问题。 事实证明,我已经添加了ppa:ubuntu-toolchain -r / test回购,以便在我的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安装上验证了这一切。

这不是一个真正的答案 – 我有同样的问题作为OP – 但SwiftShims实际上是定义在您的文件列表上面的module.map文件:

 module SwiftShims { header "CoreFoundationShims.h" header "FoundationShims.h" header "GlobalObjects.h" header "HeapObject.h" header "LibcShims.h" header "RefCount.h" header "RuntimeShims.h" header "RuntimeStubs.h" header "SwiftStddef.h" header "SwiftStdint.h" header "UnicodeShims.h" export * } 

https://github.com/apple/swift/blob/8d9ef80304d7b36e13619ea50e6e76f3ec9221ba/stdlib/public/SwiftShims/module.map

我重复了您在全新的Ubuntu 14.04 Azure虚拟机上描述的相同步骤,并获得了预期的结果

 $R0: Int = 3 

有趣的是,即使没有Clang或GCC,它也能正常工作! 后来我安装了Clang-3.5,它也工作得很好。

他们是否有可能偷偷在一个同名的新压缩包里? 我得到的一个MD5散列在这里:

 user@ubuntu1:/tmp/junk$ md5sum swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz a93f52921c491b747cad256904c8742f swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz 

你的比赛? 如果是这样,你可能想尝试不同的Ubuntu 14.04安装,如果你有权访问一个。

我也可以按照https://swift.org/getting-started/#using-the-build-system的说明成功地使&#x7528;swift build 。 正如我所怀疑的那样,删除了clang-3.5软件包的操作swift build ,但是在首次安装Clang之前,REPL仍然像原来一样工作。 然后我安装了Clang-3.4, swift build了业务。

更新1/3/2016:

使用这个问题的各种意见提示,我已经能够在我的Ubuntu 14.04 Azure虚拟机上重现错误。 作为一种替代解决方案,这个问题也可以通过操作$LD_LIBRARY_PATH来解决,请参阅无法在Ubuntu 14.04上使用Swift编译“hello world”程序 。

有同样的问题,我错过了,我没有得到包的密钥,并验证之前提取。

  1. 下载软件包
  2. wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import
  3. gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift
  4. gpg --verify swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz.sig
  5. tar xzf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
  6. PATH=/path/to/usr/bin:"${PATH}"到您的.bashrc
  7. 终于快跑了

你应该看到:

 Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance. 1> 1+1 $R0: Int = 2 

根据詹姆斯D的建议,我试图跑

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

但是,这不起作用。 奇怪的是,做什么工作没有意义。 对我来说,我通过先安装上面的ppa然后清除它来得到它的工作。 让我工作的整个命令集是

 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-4.9 # This step may be optional sudo apt-get install ppa-purge sudo ppa-purge -d trusty ppa:ubuntu-toolchain-r/test