【问题标题】:Clang, LLVM, and g++Clang、LLVM 和 g++
【发布时间】:2014-03-11 15:46:35
【问题描述】:

我安装了 clang 来比较它与 g++ (gcc) 对一些 C++ 程序的使用;如,我比较了编译时间、错误反馈等。对于相同的程序。我这样做主要是为了官方 LLVM 教程(使用 LLVM 实现编译器)。

有一次,我需要安装 LLVM 库 (v. 2.9.),而在此之前我只下载了 clang。在此之后,使用 clang++ 进行编译似乎不适用于以下教程代码;而 g++ 似乎可以使用 LLVM 指令(例如,'llvm-config --libs` 等)。在安装库的同时,我还必须从正在阅读的旧教程(llvm 2.2.,建议 clang++ 语法)转到 3.0.0 的教程。 (建议使用 g++ 语法),因为库包含位置已更改。

我的问题解释下载 llvm 库后的变化:

(1) 当我现在键入“g++”时,我是否仍然在使用 gcc,或者是否将 llvm/clang 设置为模仿 gcc 语法的新默认值?如果是,我怎样才能确保我在需要时实际使用 gcc,而不是 clang?

(2) 如果 g++ 仍然是 gcc,任何意见/猜测为什么官方 clang/llvm 教程从建议使用自己的竞争编译器切换回 gcc? (例如,here

我的系统:

Ubuntu 12.04.
llvm 2.9.
gcc 4.6.3.
铿锵3.0。

【问题讨论】:

  • 你能尝试运行命令which g++g++ --version
  • 据我所知,clang 不会对现有的 gcc 可执行文件做任何事情。您链接的 LLVM 教程可以使用任何 C++ 编译器,所以我猜他们切换到 gcc,因为您的普通人更有可能拥有 gcc,而不是他们拥有 clang。
  • @vonbrand:我在软件管理器中输入了“llvm”。开发人员库弹出,我安装了。在我可以安排的地方,我更喜欢将我的安装集成到软件经理中。
  • @Andrew.punnett:会在早上回来比赛时做。
  • 它没有别名,用which等确认,它仍然指向gcc。

标签: c++ linux gcc clang llvm


【解决方案1】:

为了输入g++ 来执行clang 编译器,您可能会在$PATH 中查看一个名为g++ 的符号链接到clang,而不是真正的g++ 的路径,或者命名为g++ 的别名,类似于alias g++='clang++'

您可以通过输入 alias g++ 来检查别名(尽管我认为这不太可能),这将让您知道您是否设置了任何别名(如果有,应该设置什么)

为了更改$PATH 问题,如果发生,您必须删除符号链接(看起来很明智,如果您想要clang,您可以只输入clang++ 而不是@987654331 @) 或更改符号链接在 PATH 变量中的位置,但由于它们很可能存在于 /usr/local/bin 或类似的东西中,因此也不太可能出现符号链接!

鉴于此,可能g++ 仍然调用gcc g++ 编译器,并且有人在键入教程时有点粗心 - 我在您链接的页面上只看到一个提到g++,靠近底部?

【讨论】:

  • 好的建议,会检查汤姆。
  • 最后一段:它不止于此。如果您尝试使用 clang++ 替换 g++ 的相同命令,则会出现大量错误。我认为这并不奇怪,因为 llvm-config 可能是为了允许 gcc 执行 llvm 代码和库,所以使用 clang 没有意义?
  • 我正在查看的位读取g++ -g -O3 toy.cpp `llvm-config --cppflags --ldflags --libs core` -o toy - 我的理解是包含在`` 标记内的命令将由shell执行,然后执行g++ -例如,您可以尝试g++ `echo "-I$DIR_TO_INCLUDE"` file.cpp -o EXE_FILE,它将包含您的目录。我真的无法想象为什么llvm-config --cppflags --ldflags --libs core 的输出应该传递被 g++ 接受为标志而不是 clang++ 的东西?除非有一些细微的语法差异等。
  • 如,为了清除我写的愚蠢方式 - 单独运行 llvm-config 命令,然后检查标准输出以查看它给你的内容,并确定其中一个是否是g++ 的有效标志,但不是 clangclang++
  • 它执行到 gcc (g++) 风格的 lib-include 指令 (-I/usr/lib/llvm-2.9./include),它应该澄清这要么是真正针对 gcc,要么至少那个clang会使用完全相同的选项。我不认为它会。并且使用clang,它确实会编译成可怕的(我昨天尝试过)。可能,@David Brown 指出了这一点:他们可能会在最近的教程中使用 gcc 来专注于推广 llvm 库作为编译器构建工具,同时不强调推动他们的竞争编译器 clang。
猜你喜欢
  • 2011-02-02
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
相关资源
最近更新 更多