2015-03-28 5 views
2

Думаю, я знаю разницу между clang и llvm, но в то же время я смущен. Я понимаю, что clang - это front-end, который возьмет программу и сделает создание разметки-разбора-ast, а затем создаст IR (LLVM IR).путаница между clang и llvm

И затем LLVM, как бэкэнд, принимает этот IR, оптимизирует его и создает сборку для целевой архитектуры. Это верно ? Я также читал, что llvm не имеет компоновщика. Итак, как это обрабатывается на OS X? Также как посмотреть на сборку, сгенерированную llvm? X

ответ

1

И затем LLVM, как бэкэнд, принимает этот IR, оптимизирует его и создает сборку для целевой архитектуры. Это верно ?

То, что вы там описали, звучит довольно корректно, за исключением того, что для нескольких целевых архитектур LLVM фактически создает двоичные файлы напрямую, без необходимости проходить промежуточную стадию сборки.

Я также прочитал, что у llvm нет компоновщика. Итак, как это обрабатывается на OS X?

Вы используете системный компоновщик, ld.

Также как посмотреть на сборку, сгенерированную llvm?

Либо разобрать выходной двоичный (с otool, например) или использовать clang -S для генерации сборки, а не двоичный выход.

+0

Обратите внимание, что LLVM работает над компоновщиком, и он уже полуфункциональен: см. Http://lld.llvm.org. – rubenvb

+0

Это еще не системный компоновщик для любой популярной инструментальной цепочки, не так ли? –

+0

Это часть экосистемы LLVM, поэтому, в конце концов (она еще не в состоянии использования), она, вероятно, станет компоновщиком по умолчанию Клана. В конце концов, это означает в течение 1 и бесконечности лет. – rubenvb

Смежные вопросы