使用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(没有这样的文件或目录)
答案 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的回答。