强制clang在Linux中使用llvm代替gcc

时间:2018-07-05 05:14:08

标签: c++ gcc clang llvm

如何在不使用gcc作为clang的后端的情况下使用llvm作为clang后端来编译C ++文件? 我很确定clang正在使用gcc,因为

$ clang++ --version
clang version 6.0.1 (tags/RELEASE_601/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

它使用gnu作为目标而不是llvm。我的llvm-config输出:

$ llvm-config --version --targets-built
6.0.1
X86

我使用标准选项为构建目标(X86)从源代码构建了clang和llvm。

编辑:我认为它正在使用gcc作为后端,因为this code在在线ide中会产生错误,但可以在装有clang ++和g ++的计算机上使用。代码依赖于事实,即gcc实施了基于策略的数据结构,这不是标准的一部分。

1 个答案:

答案 0 :(得分:1)

问题在于数据的解释。 lang所指的目标与要为其生成代码的平台有关。

  • x86_64这是与Intel /和
  • 兼容的64位处理器
  • 未知,我不确定这一点,尽管我相信它指定了有关处理器的更多详细信息,但这些信息不可用
  • linux您正在使用Linux内核/操作系统
  • gnu对象结构应遵循gnu标准,我相信它直接映射到ELF

如果使用BSD或Windows作为操作系统,或者处理器是ARM​​,Intel 32位,Spark ......

您唯一需要担心的目标是交叉编译时。换句话说,如果运行编译器的计算机对可执行结构的要求不同于运行编译器的计算机。

PS:Clang始终将LLVM用于其IR。忽略不推荐使用的Clang + C2,它始终使用LLVM优化器和代码生成器。