gpt4 book ai didi

linux - 使用 Ansible 在 Linux 上安装 Swift 3 + libdispatch

转载 作者:太空狗 更新时间:2023-10-29 11:12:43 26 4
gpt4 key购买 nike

我正在努力在 Ubuntu 16.04 上安装 Swift 3.0 和 GCD。这在今天应该是可能的,对吧?

以下是从 swift.org 下载 Swift 3、从 GitHub 克隆、构建和安装 swift-corelibs-libdispatch 的 Ansible 任务。

即使 libdispatch 的安装没有错误地完成,它也不起作用。当我尝试在 Swift repl 中 import Dispatch 时,它提示缺少功能“ block ”。检查 Makefile 确认,至少向编译器提供了标志 -fblocks

这是 Swift repl 的示例输出:

vagrant@swift3:/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:

# -*- 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

安装 Swift 3 的 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

最佳答案

正如您所注意到的,-fblocks 链接器标志在编译时为 libdispatch 适当设置。这太棒了,因为现在您有了 libdispatch 的工作版本。

不幸的是,制作的任何包含Dispatch 的内容也需要-fblocks 链接器标志.

tl;dr 解决方案是在编译时简单地向 swiftc 提供 -Xcc -fblocks

这就是我所说的解决方法。提出了更长期的解决方案"ClangImporter: enable -fblocks on non-Darwin platforms" .在此之前,尽管上述变通办法是从你所在的位置到你想去的位置的最短距离。

我会自己添加,我只是使用上面的拉取请求中的补丁来修补我的本地构建。 YMMV.

关于linux - 使用 Ansible 在 Linux 上安装 Swift 3 + libdispatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38782633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com