2016-08-05 11 views
2

私はSwift 3.0とGCDをUbuntu 16.04にインストールするのに苦労しています。これは現時点で可能でしょうか?Swift 3 + libdispatchをLinux上にインストールする

swift.orgからSwift 3をダウンロードし、GitHubからswift-corelibs-libdispatchをクローン作成、ビルド、インストールするAnsibleタスクを以下に示します。

libdispatchのインストールはエラーなく完了しますが、動作しません。 Swift replでimport Dispatchを試してみると、機能「ブロック」が見つからないという不満があります。 Makefilesを確認すると、少なくともフラグ-fblocksがコンパイラに提供されていることが確認されます。ボックスを設定するための

[email protected]:/tmp/swift-3.0-PREVIEW-3-ubuntu15.10/usr/bin$ ./swift 
Welcome to Swift version 3.0 (swift-3.0-PREVIEW-3). Type :help for assistance. 
    1> 6 * 7 
$R0: Int = 42 
    2> import Dispatch 
error: module 'CDispatch' requires feature 'blocks' 
error: could not build Objective-C module 'CDispatch' 

    2> 

Vagrantfile:

はここスウィフトREPLからの出力例ですスウィフト3をインストールするための

# -*- mode: ruby -*- 
# vi: set ft=ruby : 


Vagrant.configure(2) do |config| 
    config.ssh.forward_agent = true 
    config.vm.box = "bento/ubuntu-16.04" 

    config.vm.define "swift3" do |dev| 
     dev.vm.hostname = "swift3.dev" 
    end 

    config.vm.network :private_network, ip: "10.0.0.10" 

    config.vm.provider "virtualbox" do |vb| 
     vb.memory = "2048" 
    end 

    config.vm.provision "ansible" do |ansible| 
     ansible.playbook = "ansible/main.yml" 
    end 
end 

Ansibleタスク:

--- 

- name: Install Swift 3 requirements 
    apt: name={{ item }} state=installed 
    with_items: 
    - autoconf 
    - clang 
    - git 
    - libblocksruntime-dev 
    - libbsd-dev 
    - libcurl4-openssl-dev 
    - libdispatch-dev 
    - libkqueue-dev 
    - libpython2.7-dev 
    - libtool 
    - pkg-config 


- name: download Swift 3 
    get_url: url=https://swift.org/builds/swift-3.0-preview-3/ubuntu1510/swift-3.0-PREVIEW-3/swift-3.0-PREVIEW-3-ubuntu15.10.tar.gz 
      dest=/tmp/swift.tgz mode=0440 

- name: unarchive Swift 3 
    unarchive: dest=/tmp src=/tmp/swift.tgz copy=no creates=/tmp/swift-3.0-PREVIEW-3-ubuntu15.10 

- name: clone Swift 3 libdispatch core library 
    git: repo=https://github.com/apple/swift-corelibs-libdispatch dest=/tmp/swift-corelibs-libdispatch 
     version=swift-3.0-preview-3-branch force=true 

- name: generate Swift 3 libdispatch build files 
    command: "sh ./autogen.sh" 
    args: 
    chdir: /tmp/swift-corelibs-libdispatch 

- name: configure Swift 3 libdispatch 
    command: "sh ./configure --with-blocks-runtime=/usr/lib/x86_64-linux-gnu --with-swift-toolchain=/tmp/swift-3.0-PREVIEW-3-ubuntu15.10/usr --prefix=/tmp/swift-3.0-PREVIEW-3-ubuntu15.10/usr" 
    args: 
    chdir: /tmp/swift-corelibs-libdispatch 

- name: make Swift 3 libdispatch 
    command: "make" 
    args: 
    chdir: /tmp/swift-corelibs-libdispatch 

- name: install Swift 3 libdispatch 
    command: "make install" 
    args: 
    chdir: /tmp/swift-corelibs-libdispatch 

- name: grant permissions to use Swift 3 
    file: dest=/tmp/swift-3.0-PREVIEW-3-ubuntu15.10 mode=a+rX recurse=true 
+0

私はSwift 3について何も知らないが、(--no-provision'フラグを使用して)有能なプロビジョニングをスキップし、手動でインストール手順を実行して問題を特定したいエリア。それがうまくいけば、その問題はおそらくプレイブックにあります。それでも問題が解決しない場合、問題はボックスイメージ内のいくつかの欠落した依存関係になる可能性があります。 – Amit

答えて

1

あなたのようコンパイル時に-fblocksリンカーフラグがlibdispatchに適切に設定されていることに注意してください。これはlibdispatchの作業バージョンを持っているのですばらしいです。

残念ながらあなたにDispatchがあまりにも-fblocksリンカフラグを必要としてで含まメイクをもの。

コンパイルするたびに-Xcc -fblocksswiftcを入力するだけです。

これは私が回避策を述べたものです。長期的な解決法は、"ClangImporter: enable -fblocks on non-Darwin platforms"が提案されています。その土地まで、上記の回避策は、あなたがどこに行きたいか、どこに行きたいかまでの最短距離です。

私は自分自身を追加します。私は地元のビルドにパッチを当てるために上記のプルリクエストからのパッチを使用しています。 YMMV。

関連する問題