Linux 上的 Swift:迈出第一步

2023-12-21

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

<Edit>: 要求在这里 https://github.com/apple/swift#system-requirements也在 ubuntu 14.04 上请求 clang 版本 3.6。我首先使用 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 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到〜/下载/。安装记录和 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>  

根据本入门指南 https://swift.org/getting-started/#using-the-repl它应该打印出来

$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 build你好世界的例子 https://swift.org/getting-started/#using-the-build-system,产生以下输出:

/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 https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20151130/000134.html, post 2 https://lists.swift.org/pipermail/swift-users/Wsteek-of-Mon-20151130/000136.html, post 3 https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20151207/000196.html)是关于同样的问题。有人建议在主目录下安装 swift 会有帮助。这对我的情况没有帮助,错误消息仍然相同。

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

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

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

关于此问题的另一个线程已出现在 swift 邮件列表中从这里开始 https://lists.swift.org/pipermail/swift-users/Week-of-Mon-20151221/000592.html。遇到该问题的用户也发帖此处的 strace 输出 http://pastebin.ubuntu.com/14161487/.


我有同样的问题。原来我已经添加了ppa:ubuntu-工具链-r/测试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 安装上验证了所有这些。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux 上的 Swift:迈出第一步 的相关文章

随机推荐

  • 无依赖关系的简单字符串加密

    我需要一个简单的算法来加密 解密字符串 类似于 Base64 但更安全一些 这不是关键任务 我所需要的只是一些字符串操作 不像使用简单的 Base 64 解码器复制字符串并使其易于人类读取那么容易 为什么不使用 AES 由于我的应用程序是使
  • 无法执行 git pull

    我正在尝试做一个git pull并得到错误消息 error The following untracked working tree files would be overwritten by merge
  • 调用窗口模糊时避免元素模糊处理程序(浏览器失去焦点)

    对问题进行阐述 我有一个元素 单击该元素时会收到一个子元素 该子元素被赋予一个模糊处理程序 我希望当浏览器失去焦点 窗口模糊 时不调用该处理程序 为了实现这个目标 我尝试了几种方法 这是我目前的努力 function clicked gen
  • 应用程序中的Web.Config配置错误

    我已经准备好应用程序在托管上上传它 但是当我在服务器上上传文件时 我收到此错误 应用程序中的服务器错误 配置错误 说明 处理服务此请求所需的配置文件期间发生错误 请查看下面的具体错误详细信息并适当修改您的配置文件 解析器错误消息 此配置节不
  • 如何编写一个接受字符串并按频率降序打印字母的函数?

    我到目前为止 def most frequent string d dict for key in string if key not in d d key 1 else d key 1 return d print most freque
  • 识别 DNS​​ 请求的 PID 源 (Windows XP)

    我希望确定发出 DNS 请求的进程 查看查询给了我一个线索 但并不能帮助我确定确切的过程 我可以在 Wireshark 中看到本地端口号 但请求太短暂 无法被 TCPView 接收 有没有可以捕获 DNS 请求和 PID 的日志记录工具 过
  • 强制浏览器在 Angular 环境中清除缓存

    有一个流行的问题是如何在 VanillaJS 应用程序中强制清除浏览器的缓存 普遍的共识是 将 js 脚本的名称或脚本参数设置为新值 强制浏览器清除缓存 https stackoverflow com questions 1922910 f
  • 使用 jQuery 验证插件显示“this[0] 未定义”消息

    我已经开始使用 jQuery 验证插件 我在错误消息的显示方面遇到了一些问题 并且想要创建一个测试页面 我可以在其中尝试一些事情 尽管昨天同样的设置对我有用 但我现在收到以下消息 this 0 is undefined 查看 jQuery
  • 内联 HTML5 SVG 过滤器,不干扰布局

    我需要将以下内联 SVG 过滤器注入到我的 HTML5 文档中
  • setFetchBatchSize 似乎无法正常工作

    我就这个主题问了几个问题 但仍然无法让它发挥作用 我有一个包含 10k 多行人名的核心数据 我在表格视图中显示这些数据 我希望能够搜索并更新表格中的每一个字母 这是非常滞后的 正如建议的那样 我观看了 WWWDC 10 核心数据演示并尝试实
  • 在 iPhone 上使用 HTML 文件输入上传文件

    我正在创建一个 Web 表单 用于将小影片剪辑上传到 HTTP 服务器 但是 虽然我的 HTML 文件输入控件显示在 iPod touch 上 但该按钮完全禁用 我无法单击它来上传文件 我需要做什么才能使用输入控件将文件 例如影片剪辑或图片
  • 在 MS Access 中,如何获取一个表中不在另一个表中的所有行?

    我尝试了很多不同的方法 但总是出现语法错误 我有两个表 表 A 和表 B 它们都有一个 con number 字段作为唯一 ID 我想选择 tableB 中不存在于 tableA 中的所有行 谁能给我这个查询 就像在 MS Access 中
  • 我可以用 make 或 new 在 golang 中制作预填充字符串吗?

    我正在尝试优化 Go 中的 stringpad 库 到目前为止 我发现用已知字符值 例如 0 或 填充字符串 实际上是 bytes Buffer 的唯一方法是使用 for 循环 代码片段是 PadLeft pads string on le
  • 如何“锁定键盘”以防止在 X11/Linux/Gnome 上发送更多按键?

    我正在用 python 为 Ubuntu Linux 编写一个反 RSI 打字中断程序 我希望能够 锁定键盘 以便忽略所有按键 直到我 解锁 它 我希望能够强制用户暂停打字 我想要一些编程方式来 关闭 键盘 几乎立即 直到我的程序稍后释放它
  • 带有下划线的 scala 传递函数产生一个函数而不是一个值

    您好 我正在编写将函数传递给映射的任何可能的变体 我最初的理解是它们都会产生相同的结果 但我发现第 2 3 行实际上产生了不同的输出 而第 4 行对我来说是个谜 def g v Int List v 1 v v 1 val l List 1
  • 在 read_excel 中保留特定列

    我正在将 Excel 文件导入到 R 中 我只想保留 A 列和 C 列而不是 B 列 列按顺序为 A B C 但以下代码也保留 B 列 如何在不使用另一行代码子集的情况下删除 B 列 df lt read excel df xlsm fut
  • WPF 过滤列表框

    我有一个ListBox绑定到字符串列表 我想在输入文本时过滤列表TextBox 我该怎么做 public void ListLoad ElementList new List
  • 如何将字符串从 Haskell 传递到 C?

    我想做的就是将纯文本字符串从 Haskell 传递到 C 但是 它表示 Char 是不可接受的返回类型 我无法在任何地方找到他们认为的原因 也找不到可接受的返回类型 我正在尝试制作一个非常简单的操作系统映像 我可以使用 Qemu 启动它 有
  • 确保容量在 Java 中如何工作?

    StringBuffer buff1 new StringBuffer tuts point System out println Old Capacity of buff1 buff1 capacity buff1 ensureCapac
  • Linux 上的 Swift:迈出第一步

    我对斯威夫特完全陌生 它刚刚作为 Linux 的开源版本发布 我想尝试一下 这是在 ubuntu 14 04 上 clang 已根据先决条件安装