【发布时间】:2020-08-30 16:11:49
【问题描述】:
当使用这样的命令时:
clang -### -O3 -a.c
然后,它将输出以下内容:
clang version 1.1 (branches/release_27)
Target: x86_64-unknown-linux-gnu
Thread model: posix
"/tensorflow/bin/llvm+clang-2.7/bin/clang" "-cc1" "-triple" "x86_64-unknown-linux-gnu" "-S" "-disable-free" "-main-file-name" "a.c" "-mrelocation-model" "static" "-mdisable-fp-elim" "-mconstructor-aliases" "-munwind-tables" "-target-cpu" "x86-64" "-resource-dir" "/tensorflow/bin/llvm+clang-2.7/lib/clang/1.1" "-O3" "-fmessage-length" "141" "-fgnu-runtime" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-o" "/tmp/cc-w9Hpfd.s" "-x" "c" "a.c"
"/usr/bin/gcc" "-O3" "-c" "-m64" "-o" "/tmp/cc-8haDzc.o" "-x" "assembler" "/tmp/cc-w9Hpfd.s"
"/usr/bin/gcc" "-O3" "-m64" "-o" "a.out" "/tmp/cc-8haDzc.o"
所以,我们可以看到llvm(llvm-2.7)的早期版本使用了gcc的汇编器和链接器。
但是,clang 如何、何时、何地使用 llvm?
clang 在clang -cc1 中使用llvm 吗?
如何证明? (文档或命令行输出都可以作为证据。但我找不到。)
我认为 llvm+clang 是一个灵活的工具链,我可以找到许多从 C 程序生成可执行文件的方法。
提前致谢。
【问题讨论】:
-
Clang 使用 LLVM 作为库,即 LLVM 是 clang 可执行文件的一部分。
-
@AlexDenisov 出于好奇,它真的是静态链接的吗?
-
仅供参考:您可以使用
nm和/或ldd来回答此类问题,几乎可以使用任何工具。 -
@JoseFernandoLopezFernandez 这取决于构建:它可以静态链接或动态链接。
标签: c gcc compiler-construction clang llvm