заставить clang использовать llvm вместо gcc в linux - PullRequest
0 голосов
/ 05 июля 2018

Как я могу использовать llvm в качестве бэкэнда clang для компиляции файлов C ++ без использования gcc в качестве бэкэнда clang? Я почти уверен, что 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

Я собрал clang и llvm из исходного кода, используя стандартные параметры для моей цели сборки (X86).

РЕДАКТИРОВАТЬ: я думаю, что он использует gcc в качестве бэкэнда, потому что этот код выдает ошибку в online ide, но работает на моей машине с clang ++ и g ++. Код опирается на тот факт, что gcc имеет реализацию структур данных на основе политик, которые не являются частью стандарта.

1 Ответ

0 голосов
/ 05 июля 2018

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

  • x86_64 Это 64-битный процессор, совместимый с Intel / и
  • неизвестно Я не уверен насчет этого, хотя я полагаю, что он указывает более подробную информацию о процессоре, который недоступен
  • linux Вы используете ядро ​​/ операционную систему Linux
  • GNU. Структура объекта должна соответствовать стандартам GNU, я считаю, что это напрямую отображается в ELF

Это будет отличаться, если вы используете BSD или Windows в качестве ОС, или если ваш процессор ARM, Intel 32 bit, Spark ...

Единственный момент, когда вы должны беспокоиться о цели, это когда вы кросс-компилируете. Другими словами, если компьютер, на котором вы запускаете компилятор, предъявляет другие требования к исполняемой структуре, чем компьютер, на котором вы будете его запускать.

PS: Clang всегда использует LLVM для IR. игнорируя устаревший Clang + C2, он всегда использует оптимизатор LLVM и генератор кода.

...