Swift в Linux: сделайте очень первый шаг

Я совершенно новый для быстрого. Он только что был выпущен как открытый источник для Linux, и я хотел попробовать его. Это на ubuntu 14.04. clang устанавливается в соответствии с предварительными условиями.

<Edit>: требования здесь запрос clang версии 3.6 также на ubuntu 14.04. Сначала я пробовал эти первые шаги с clang 3.4, но с тех пор обновлялся до 3.6, следуя инструкциям в ссылке и повторюсь. Тот же результат. </Edit>

Я загрузил https://swift.org/builds/ubuntu1404/swift-2.2-SNAPSHOT-2015-12-01-b/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz в ~/Downloads/. Стенограмма установки и первый шаг в быстрой:

$ cd /tmp
$ tar xf ~/Downloads/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz 
$ PATH=/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin/:"$PATH"
$ clang++ --version
Ubuntu clang version 3.6.0-2ubuntu1~trusty1 (tags/RELEASE_360/final) (based on LLVM 3.6.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
$ which swift
/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin//swift
$ swift --version
Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-unknown-linux-gnu
$ swift
Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
  1> 1 + 2
opening import file for module 'SwiftShims': No such file or directory
  1>  

В соответствии с это руководство по началу работы, оно должно быть напечатано вместо

$R0: Int = 3

Что не так и как я могу исправить?

Изменить: попытка найти этот файл вручную: по-видимому, он не содержится в установке:

$ find swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/ | grep -i shims
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/FoundationShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/SwiftStddef.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/module.map
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/UnicodeShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/GlobalObjects.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/HeapObject.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RuntimeShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RefCount.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/RuntimeStubs.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/LibcShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/CoreFoundationShims.h
swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/shims/SwiftStdint.h

Изменить: когда я пытаюсь выполнить swift build пример helloworld, этот вывод создается:

/tmp/Hello$ swift build
<unknown>:0: error: opening import file for module 'Swift': No such file or directory
swift-build: exit(1): ["/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/bin/swiftc", "--driver-mode=swift", "-I", "/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/pm", "-L", "/tmp/swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04/usr/lib/swift/pm", "-lPackageDescription", "/tmp/Hello/Package.swift"]

Изменить: новые результаты до 2015-12-22

Поскольку я опубликовал этот вопрос, были выпущены как минимум еще два моментальных снимка для быстрого linux: 2015-12-10 и 2015-12-18. Я пробовал это, но они не исправляют проблему.

Этот список рассылки здесь (post 1, post 2, post 3) - та же проблема. Было предложено, что быстрая установка под домашним каталогом помогла бы. В моем случае это не помогло, сообщение об ошибке все равно.

Более интересно, что этот список рассылки содержит анализ ошибки REPL, созданной с помощью strace. Было бы интересно сравнить этот конкретный вывод strace с выходом strace из системы, в которой работает REPL.

Изменить: Дополнительная информация до 2015-12-26:

Вышел новый быстрый выпуск от 2015-12-22. Этот выпуск имеет ту же проблему.

Еще одна тема, касающаяся этой проблемы, появилась в списке быстрой рассылки начинающемся здесь. Пользователь, столкнувшийся с проблемой, также опубликовал вывод strace здесь.

Ответ 1

У меня была такая же проблема. Оказывается, я добавил ppa: ubuntu-toolchain-r/test repo, чтобы установить g++ - 4.9 в дистрибутив Mint (17.2). Как только я очистил репозиторий и восстановил различные библиотеки в своих исходных версиях, Quick наконец-то сработал у меня.

В частности, мне пришлось запустить

sudo apt-get install ppa-purge
sudo ppa-purge -d trusty ppa:ubuntu-toolchain-r/test

При очистке ppa-purge жаловался, что для разрешения конфликтов ему придется удалить довольно много пакетов, которые он не смог найти в репозитории Ubuntu Trusty (включая действительно основные, такие как build-essential, xorg, gcc, x11-xserver-utils...), поэтому я сделал заметку и переустановил их сразу после чистки. Просто будьте очень осторожны.

Я думаю, что некоторые из библиотек, переопределенных при установке g++ 4.9, создавали конфликт. Я также проверил все это на новой установке Mint.

Ответ 2

На самом деле это не ответ. У меня такая же проблема, как и у OP, но SwiftShims на самом деле определен файл module.map в списке файлов выше:

module SwiftShims {
  header "CoreFoundationShims.h"
  header "FoundationShims.h"
  header "GlobalObjects.h"
  header "HeapObject.h"
  header "LibcShims.h"
  header "RefCount.h"
  header "RuntimeShims.h"
  header "RuntimeStubs.h"
  header "SwiftStddef.h"
  header "SwiftStdint.h"
  header "UnicodeShims.h"
  export *
}

https://github.com/apple/swift/blob/8d9ef80304d7b36e13619ea50e6e76f3ec9221ba/stdlib/public/SwiftShims/module.map

Ответ 3

Я повторил те же шаги, которые вы описали на совершенно новой Ubuntu 14.04 Azure VM, и получил ожидаемый

$R0: Int = 3

Интересно, что он отлично работал даже без Clang или GCC! Позже я установил Clang-3.5, и он тоже работал.

Возможно ли, что они прокрались в новый tarball с тем же именем? Хэш MD5 того, который я получил, находится здесь:

[email protected]:/tmp/junk$ md5sum swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz 
a93f52921c491b747cad256904c8742f  swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz

Совпадает ли ваша? Если это так, вы можете попробовать другую установку Ubuntu 14.04, если у вас есть доступ к ней.

Я также смог успешно использовать swift build, как указано в https://swift.org/getting-started/#using-the-build-system. Удаление пакета clang-3.5 сломалось swift build, как я и подозревал, но REPL swift по-прежнему работал так, как первоначально, перед установкой Clang в первый раз. Затем я установил Clang-3.4, а swift build вернулся в бизнес.

Обновление 1/3/2016:

Используя подсказки из различных комментариев по этому вопросу, я смог воспроизвести ошибку на моей Ubuntu 14.04 Azure VM. В качестве альтернативного решения проблему можно также решить, манипулируя $LD_LIBRARY_PATH, см. Невозможно скомпилировать "hello world" программа с Swift на Ubuntu 14.04.

Ответ 4

У той же проблемы, что я пропустил, было то, что я не получил ключи для пакета и не проверял его до извлечения.

  • Загрузите пакет
  • wget -q -O - https://swift.org/keys/all-keys.asc | gpg --import
  • gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift
  • gpg --verify swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz.sig
  • tar xzf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu14.04.tar.gz
  • добавьте PATH=/path/to/usr/bin:"${PATH}" к вашему .bashrc
  • наконец запустите swift

Вы должны увидеть:

Welcome to Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c). Type :help for assistance.
1> 1+1
$R0: Int = 2

Ответ 5

Следуя совету Джеймса Д., я попытался запустить

sudo apt-get install ppa-purge
sudo ppa-purge -d trusty ppa:ubuntu-toolchain-r/test

Однако это не сработало. Что странно, так это то, что работа не имеет смысла. Для меня у меня это работает, сначала установив вышеуказанный ppa, а затем очистив его. Весь набор команд, который меня заработал, был

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.9 # This step may be optional

sudo apt-get install ppa-purge
sudo ppa-purge -d trusty ppa:ubuntu-toolchain-r/test