Linux ユーザーですが Swift が使いたい。これまで Swift は 3.1-dev を使っていたのですが、折角 4.0 があるので使ってみることにしました。ちょっとハマったところがあったので記しておきます。なお、面倒なので暗号鍵を使ったデジタル署名版ではありません。その方がよろしい方は本家のドキュメントを見て下さい。Linux Mint 18.2 で確認しました。たぶん Ubuntu でもそのままいけると思います。
ここから Swift 4.0 Ubuntu 16.10 をダウンロードします(上記のとおり、Signature でない方)。で、基本的には解凍して好きな場所に置くだけです。ただし、
$ sudo apt-get install clang libicu-dev
をしていない方はしておいて下さい。あとは、僕の環境なら
$ ~/Documents/Swift/usr/bin/swift
みたいな感じで REPL が立ち上がります。詳細はここと同じなので、よろしければ参考にして下さい。
自分がハマったのは、$ swift としても
swift: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by swift)
というエラーが出ることです。確かに、
$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX
とすると GLIBCXX_3.4.22 はありません。gcc のビルドが必要らしく、困ったなと思ったのですが、
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
としてリポジトリを追加したあと、アップデートマネージャでシステムの更新をしたら OK でした。
まだあります。今度は $ swift -v とやっても
$ swift -v
Swift version 4.0 (swift-4.0-RELEASE)
Target: x86_64-unknown-linux-gnu
/home/***/Documents/Swift/usr/bin/lldb "--repl=-disable-objc-interop -color-diagnostics"
error: failed to stop process at REPL breakpoint
というエラーがでます。インタプリタで適当なプログラムを実行すると
<unknown>:0: error: could not load the swift standard library
と出ます。何かライブラリが足りないようです。コンパイルは出来るので実行ファイルを実行してみたところ、
$ ./qsort
./qsort: error while loading shared libraries: libicuuc.so.57: cannot open shared object file: No such file or directory
となるのがヒントになりました。libicuuc.so.57 というのが足りないのですね。では $ sudo apt-get install libicu-dev かなと思ったのですが、libicu-dev は最新バージョンのようです。
ここで、このページが役に立ちました。ここから libicu57_57.1-6_amd64.deb をダウンロードしてきます。あるいは
$ wget http://ftp.us.debian.org/debian/pool/main/i/icu/libicu57_57.1-6_amd64.deb
でも OK です。そして
$ sudo dpkg -i libicu57_57.1-6_amd64.deb
をすれば解決の筈。実際に swift のインタプリタが動けば(あるいはコンパイルして実行できれば)終了です。お疲れ様でした。
最終的に
$ swift -v
Swift version 4.0 (swift-4.0-RELEASE)
Target: x86_64-unknown-linux-gnu
/home/***/Documents/Swift/usr/bin/lldb "--repl=-disable-objc-interop -color-diagnostics"
Welcome to Swift version 4.0 (swift-4.0-RELEASE). Type :help for assistance.
となりました。OK ですね!