强制 Clang 在 Linux 中使用 llvm 而不是 GCC

force clang to use llvm instead of gcc in linux

本文关键字:llvm GCC Clang Linux 强制      更新时间:2023-10-16

如何在不使用 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 作为后端,因为此代码在在线 ide 中产生错误,但在我的机器上使用 clang++ 和 g++ 工作。代码依赖于这样一个事实,即 gcc 实现了基于策略的数据结构,这些数据结构不是标准的一部分。

问题在于数据的解释。clang 引用的目标与您为其生成代码的平台有关。

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

如果您使用 BSD 或 Windows 作为操作系统,或者当您的处理器是 ARM、英特尔 32 位、Spark 时,这将有所不同......

唯一应该担心目标的时刻是交叉编译时。换句话说,如果运行编译器的计算机对可执行结构有其他要求,而不是运行编译器的计算机。

忽略已弃用的Clang+C2,它始终使用LLVM优化器和代码生成器。