Zesty 附带了多个版本的 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.
我该怎么办?
答案1
添加到已接受的答案:
如果您有多个版本的 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-alternatives:错误:替代 clang++ 不能成为 clang 的从属:它是一个主替代
当您尝试运行上述命令时,可能会出现此错误。不用担心,这只是意味着您已经将clang++
其配置为替代方案,因此您需要删除该替代方案,然后上述操作才能生效。您可以使用以下命令执行此操作:
sudo update-alternatives --remove clang++ /usr/bin/clang++-3.9
对每个版本的 clang++ 都执行此操作,然后将其全部删除后再试一次。
资料来源:
答案2
这个答案指出了我正确的方向:
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
运行这两个命令后,构建就可以继续了。