Что делает "llvm / libexec / clang- cc"? - PullRequest
       77

Что делает "llvm / libexec / clang- cc"?

0 голосов
/ 10 февраля 2020

Используя команду 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 для внешнего интерфейса проекта «лязг» и зад конец "g cc"?

Поскольку я нахожу последние две строчки кода выше, называемые "/usr/bin/gcc".

У меня есть поиск это в течение нескольких часов, вы можете мне помочь?

Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Вы, кажется, используете довольно старую версию Clang. Возможно, вы захотите попробовать более новый.

clang-cc - это компилятор clang C, который преобразует программу C в язык ассемблера. [Примечание 1]. В зависимости от версии и цели, он также может напрямую создавать объектный файл. См. Флаг командной строки -integrated-as.

Если в вашей версии Clang нет ассемблера для вашей целевой архитектуры, драйвер clang попытается использовать системный ассемблер (и компоновщик). В некоторых системах они будут частью G cc, хотя есть и другие варианты.


Примечания

  1. Clang фактически сначала компилирует C (или другие C -подобных языков) в нейтральное для платформы промежуточное представление LLVM (IR), а затем использует библиотеку LLVM для преобразования ее в оптимизированный для платформы c ассемблерный код. Эти две части обычно называются Clang «front-end» (C⇒LLVM) и «back-end» (LLVM⇒Assembler). Это не отдельные программы
2 голосов
/ 10 февраля 2020

Что он (файл "libexec / clang- cc") делает?

Его вывод "-o" "/tmp/cc-yffqSv.s" предлагает выводить сборку.

и конец "g cc"?

Последние две строки с вызовами gcc:

  1. Создание объектного файла из сборки.
  2. Связать объектные файлы в a.out.
...