Zesty поставляется с несколькими версиями Clang. Пакет clang зависит от clang-3.9 и clang-4.0 . Похоже, что Clang 4 используется по умолчанию:
$ clang --version
clang version 4.0.0-1ubuntu1 (tags/RELEASE_400/rc1)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Однако мне нужно, чтобы Clang 3.9 был версией по умолчанию. Я не могу скомпилировать UnrealEngine из-за этого:
UnrealBuildTool Exception: ERROR: This version of the Unreal Engine can only be
compiled with clang 3.9, 3.8, 3.7, 3.6 and 3.5. clang 4.0.0 may not build it -
please use a different version.
Как мне это сделать?
Этот ответ указал на меня в правильном направлении:
sudo update-alternatives --install \
/usr/bin/clang++ clang++ /usr/lib/llvm-3.9/bin/clang++ 100
sudo update-alternatives --install \
/usr/bin/clang clang /usr/lib/llvm-3.9/bin/clang 100
После выполнения тех двух команд, сборка смогла продолжиться.
Чтобы опираться на принятый ответ, если у вас есть несколько версий clang, в ваших интересах сделать clang++
зависимым от clang
, так что все, что вам нужно сделать, это обновить clang до другой версии и версия clang ++ следует этому примеру.
Вы можете сделать это, используя опцию --slave
update-alternatives
. Итак, что-то вроде этого:
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.9 100 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.9
Конечно, вы можете сделать это для других версий:
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-4.0
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 100 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-5.0
Чтобы переключать версии, вы просто набираете:
sudo update-alternatives --config clang
Введите выбор, и clang
, и clang++
будут автоматически переключены на одни и те же версии.
Та же идея применима к GCC
, если у вас также есть несколько версий этого, вы можете использовать этот метод для настройки gcc
и g++
.
update-альтернативы: ошибка: альтернатива clang ++ не может быть подчиненной clang: это главная альтернатива
blockquote>Вы можете получить эту ошибку при попытке запустить вышеуказанные команды. Не беспокойтесь, это просто означает, что вы уже настроили
clang++
самостоятельно в качестве альтернативы, поэтому вам нужно будет удалить эту альтернативу, прежде чем сработает вышеперечисленное. Вы можете сделать это с помощью команды:sudo update-alternatives --remove clang++ /usr/bin/clang++-3.9
Сделайте это для каждой версии clang ++, затем, удалив их все, попробуйте снова.
Источники: