"llvm/libexec/clang-cc" 是做什么的?

What does "llvm/libexec/clang-cc" do?

使用命令clang -### a.c可以输出clang a.c调用的命令

对我来说,它在我的屏幕上输出以下内容(关注最后三行):

clang version 1.0 (https://llvm.org/svn/llvm-project/cfe/branches/release_26 exported)
Target: x86_64-unknown-linux-gnu
Thread model: posix
 "/usr/local/bin/llvm+clang-2.6-x86_64-linux/bin/../libexec/clang-cc" "-triple" "x86_64-unknown-linux-gnu" "-S" "-disable-free" "-main-file-name" "a.c" "--relocation-model" "static" "--disable-fp-elim" "--unwind-tables=1" "--mcpu=x86-64" "--fmath-errno=1" "-fdiagnostics-show-option" "-o" "/tmp/cc-yffqSv.s" "-x" "c" "a.c"
 "/usr/bin/gcc" "-c" "-m64" "-o" "/tmp/cc-pa2Qo4.o" "-x" "assembler" "/tmp/cc-yffqSv.s"
 "/usr/bin/gcc" "-m64" "-o" "a.out" "/tmp/cc-pa2Qo4.o"

在行中:/usr/local/bin/llvm+clang-2.6-x86_64-linux/bin/../libexec/clang-cc" "-triple" "x86 ......,显示命令 clang 调用了这个:/libexec/clang-cc.

它(文件 "libexec/clang-cc")有什么作用?

还有一个问题想问:

是否:命令clang使用项目前端"clang",后端"gcc"?

因为我发现上面最后两行代码叫做“/usr/bin/gcc”。

我已经搜索了几个小时了,你能帮帮我吗?

提前致谢。

What does it(file "libexec/clang-cc") do?

它的输出"-o" "/tmp/cc-yffqSv.s"表明它输出汇编。

and the back end of "gcc"?

带有 gcc 调用的最后两行是:

  1. 从程序集生成目标文件。
  2. Link 目标文件到 a.out.

您使用的 Clang 版本似乎很旧。您可能想尝试更新的。

clang-cc是clang C编译器,它将C程序转换为汇编语言。 [注1]。根据版本和目标,它也可以直接生成目标文件。请参阅 -integrated-as 命令行标志。

如果您的 Clang 版本没有针对您的目标体系结构的汇编器,clang 驱动程序将尝试使用系统汇编器(和链接器)。在某些系统上,这些将成为 Gcc 的一部分,尽管还有其他选项。


备注

  1. Clang 实际上首先将 C(或其他类 C 语言)编译为平台中立的 LLVM 中间表示 (IR),然后使用 LLVM 库将其转换为优化的特定于平台的汇编代码。这两部分就是通常所说的Clang“前端”(C⇒LLVM)和“后端”(LLVM⇒Assembler)。这些不是单独的程序