安装clang-3.5软件包后找不到clang和clang ++


26

安装clang-3.5软件包后,在命令行上输入clangclang++会给我一条消息,指出可以在那些程序中找到哪些软件包clang-3.5

原始安装使用以下命令完成:

sudo apt-get install clang-3.5 llvm

build-essential 之前已安装。

关于可能发生的事情有什么想法吗?

Answers:


30

它在那里,但仍称为clang-3.5。

您可以像clang-3.5(或clang++-3.5)一样执行它,或像我一样设置它的符号链接(安装常规的clang无效):

sudo ln -s /usr/bin/clang-3.5 /usr/bin/clang
sudo ln -s /usr/bin/clang++-3.5 /usr/bin/clang++

可能难以解决;但至少现在可以使用:)


对于clang-6.0,我还必须执行以下操作:ln -s /usr/bin/llc-6.0 /usr/bin/llc
forza azzurri

12

使用铛作为默认的正确方法cc,并c++是使用update-alternatives

可以将具有相同或相似功能的多个程序同时安装在单个系统上。例如,许多系统同时安装了多个文本编辑器。这为系统的用户提供了选择,允许每个用户使用不同的编辑器(如果需要),但是如果用户未指定特定的首选项,则程序很难做出选择要调用的编辑器的困难。

所以首先您需要添加clang-3.5clang++-3.5替代eg gccg++

sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-3.5 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-3.5 100

如果您需要随时切换回gccg++可以使用以下--config选项:

sudo update-alternatives --config c++

您可以添加一些关于参数的额外说明吗?为什么cc/ c++在两条路径之间?那到底是什么100?优先?
helmesjo

看一下update-alternatives文档。我认为他们的解释比我在这里总结的要好。
Yan Foto

5

在Ubuntu 15.04上,您还可以将clang软件包与clang-xx软件包一起安装。然后,您可以键入clang ++,并且应该找到相应的可执行文件。

sudo apt-get install clang

难道“ apt-get install clang”会简单地安装最新版本,然后使用它吗?如果OP正在安装v3.5,则他不想使用最新的v3.5。
amfcosta

4

将结果添加到Yan Foto的答案中(以防万一您的目标是获得可用的clang但不一定要用作cc),您实际上可以使用以下命令一次性添加整个程序集

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 380 \
--slave /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 \
--slave /usr/bin/clang-check clang-check /usr/bin/clang-check-3.8 \
--slave /usr/bin/clang-query clang-query /usr/bin/clang-query-3.8 \
--slave /usr/bin/clang-rename clang-rename /usr/bin/clang-rename-3.8

(请注意,每个Clang版本随附的二进制文件集可能有所不同,例如3.6确实有clang-tblgen,而3.8没有。)

如果对安装的每个版本的clang重复此操作,则只需使用一个update-alternatives命令即可在它们之间切换。

(与此同时,显然,关于是否将这些链接包含在Ubuntu软件包中仍存在持续的辩论:https : //bugs.launchpad.net/ubuntu/+source/llvm-3.1/+bug/991493


0

在您的主目录中创建一个.bashrc文件。输入此行代码。

别名clang ++ =“ clang ++-3.5”

关闭您的终端。再次打开它。然后尝试再次编译您的程序。

据我所知,除非您在命令名称“ clang ++-3.5”中声明版本,否则clang将无法工作。因此,我只是在我的.bashrc文件中使用别名作为别名。因此,我只需要键入“ clang ++”。

顺便说一下,我下载了clang 3.5,所以请根据您的版本调整先前的建议。


0

如果正确安装了clang,那么另一种非常简单的方法可以省去键入版本号和程序名称的麻烦,例如,使用自动完成功能(已安装clang ++-3.5):

clang+[TAB][ENTER]

因此,您只需键入clang+,点击TabEnter。使用目录名,文件名等以相同的方式工作。(但是,如果您安装了一个以上版本的程序,这将对您没有帮助。)


0

如果安装了clang- 3.8(如在Ubuntu 16.04上),则这应设置clang- 4.0的更新选项:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-4.0 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-4.0 100
sudo update-alternatives --install /usr/bin/clang-apply-replacements clang-apply-replacements /usr/bin/clang-apply-replacements-4.0 100
sudo update-alternatives --install /usr/bin/clang-check clang-check /usr/bin/clang-check-4.0 100
sudo update-alternatives --install /usr/bin/clang-query clang-query /usr/bin/clang-query-4.0 100
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-4.0 100
sudo update-alternatives --install /usr/bin/scan-build scan-build /usr/bin/scan-build-4.0 100
sudo update-alternatives --install /usr/bin/scan-view scan-view /usr/bin/scan-view-4.0 100

0

补充了约翰·温丁有关符号链接的答案。在root-shell中,您可以一次链接所有各种clang工具:

例如

find /usr/bin/ -name clang*  | sed -E 's/^(\/usr\/bin\/.*)(\-[0-9]*)$/ln -s -v \1\2 \1/' | xargs -d '\n' -n 1 bash -c

然后重复以下步骤:

llc-*
lld-*
lldb-*
llvm-*

然后,所有内容都应该链接在一起,而不仅仅是很小的选择。(也许我还是忘记了什么)。

这将根据/ usr / bin中的模式找到所有文件,删除所有结尾数字(-8或-9甚至-10),然后在每个文件上创建符号链接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.