无法编译"你好世界"在Ubuntu 14.04上使用Swift编程

时间:2015-12-12 07:55:51

标签: swift ubuntu ubuntu-14.04

使用Ubuntu 14.04

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty

并尝试编译一个hello world Swift程序。

print("Hello World!")

我已验证下载:

 gpg --verify swift-2.2-SNAPSHOT-2015-12-10-a-ubuntu14.04.tar.gz.sig
gpg: Signature made Thu 10 Dec 2015 07:17:37 PM PST using RSA key ID 412B37AD
gpg: Good signature from "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD

但是当我尝试编译hello world程序时,我得到了这个错误:

> swiftc hello_world.swift 
<unknown>:0: error: opening import file for module 'SwiftShims': No such file or directory

如果我启动Swift REPL,我会收到类似的错误:

~$ swift
Welcome to Swift version 2.2-dev (LLVM 7bae82deaa, Clang 53d04af5ce, Swift 5995ef2acd). Type :help for assistance.
  1> y = 6
opening import file for module 'SwiftShims': No such file or directory
  1>  

如果我按照given here的说明使用&#34; swift build&#34;与&#34; swiftc&#34;为了编译Hello World Swift程序,我得到了一个不同的错误:

$ swift build
<unknown>:0: error: opening import file for module 'Swift': No such file or directory
swift-build: exit(1): ["/home/scooter/Programs/Swift/V2.2/bin/swiftc", "--driver-mode=swift", "-I", "/home/scooter/Programs/Swift/V2.2/lib/swift/pm", "-L", "/home/scooter/Programs/Swift/V2.2/lib/swift/pm", "-lPackageDescription", "/home/scooter/code/swift/helloworld-project/Package.swift"]

执行解释器:

$ swift hello_world.swift

给出

<unknown>:0: error: opening import file for module 'SwiftShims': No such file or directory

strace尝试运行swift时出错:

$ strace  -o /tmp/swift.log -- swift <(echo '1 + 1')
<unknown>:0: error: opening import file for module 'SwiftShims': No such file or directory
  

开(&#34; /home/user/Programs/Swift/V2.2/lib/swift/linux/x86_64/SwiftShims.swiftmodule" ;,   O_RDONLY)= -1 ENOENT(没有这样的文件或目录)

2 个答案:

答案 0 :(得分:1)

很抱歉在内容方面添加一个真正应该发表评论的答案,但是评论时间太长了。

据我所知,这确实与Swift on Linux: Make very first step work中描述的问题相同。我在业余时间一直在研究这个问题,但到目前为止还没有运气。问另一个问题的用户一直在追求它,并在那里有一些有趣的近期更新。

要尝试的一些事项:

查看swift解释器是否有效。只需输入swift hello_world.swift,看看会发生什么。我认为它不会起作用。如果没有,则运行strace命令,如下所示:

strace -o /tmp/swift.log -- swift <(echo '1 + 1')

并查看/tmp/swift.log。查看无法找到的文件,尤其是在输出结尾附近。警告:即使在没有发生错误的系统上(我还没有能够重现错误),strace输出会显示很多No such file...错误。

您还可以使用-v选项尝试swift和swiftrc以启用详细输出,并查看是否发现任何可疑内容。

2016年2月更新:

前面提到的问题已经更新了问题的可能解决方案:摆脱gcc,g ++,libgcc和libstdc ++的非标准安装。请参阅其他问题中的评论。

2016年1月3日更新:

使用讨论中关于其他问题的线索,我已经能够通过从源安装gcc-5.1.0并预先挂起新安装的libstdc ++的位置来重现该问题.so.6到LD_LIBRARY_PATH变量。

问题可以解决如下: 1)找出安装旧软件包的libstdc++.so.6的位置。在我的系统上:

user@ubuntu14:~$ dpkg -l | grep libstdc++
ii  libstdc++-4.8-dev:amd64            4.8.4-2ubuntu1~14.04             amd64        GNU Standard C++ Library v3 (development files)
ii  libstdc++6:amd64                   4.8.4-2ubuntu1~14.04             amd64        GNU Standard C++ Library v3

user@ubuntu14:~$ dpkg -L libstdc++6 | grep libstdc++.so
    /usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py
    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19
    /usr/lib/x86_64-linux-gnu/libstdc++.so.6

2)将libstdc++.so.6的位置添加到$LD_LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

3)仔细检查swift二进制文件是否正在使用正确的共享库:

user@ubuntu14:~$ ldd `which swift` | grep libstdc++
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdd1476b000)

现在Swift可以在没有错误的情况下工作。

答案 1 :(得分:0)

您是否使用PPA或从源构建的构建链的任何库进行非标准安装?特别是libstdc ++。请参阅我对Swift on Linux: Make very first step work的回答。