Ajax не поддерживает загрузку файлов, вы должны использовать iframe вместо
Для некоторых файлов C / C ++ foo.c
:
> clang -S -emit-llvm foo.c
Производит foo.ll
, который является IR-файлом LLVM.
Опция -emit-llvm
также может быть передана прямо перед интерфейсом компилятора, а не с помощью драйвера -cc1
:
> clang -cc1 foo.c -emit-llvm
Производит foo.ll
с IR. -cc1
добавляет некоторые интересные варианты, такие как -ast-print
. Подробнее см. -cc1 --help
.
Чтобы скомпилировать LLVM IR далее для сборки, используйте инструмент llc
:
> llc foo.ll
Производит foo.s
со сборкой (в соответствии с архитектурой машины, в которой вы ее запускаете). llc
является одним из инструментов LLVM - - это его документация .
Используйте
clang -emit-llvm -o foo.bc -c foo.c
clang -o foo foo.bc
.o
должны ссылаться на файлы двоичных объектов, .s
на файлы сборки и что-то еще (по соглашению .ll
) на файлы LLVM IR. В противном случае легко запутаться. Clang / LLVM теперь не имеют собственного компоновщика для двоичных объектов (хотя один из них работает). Линейщик LLVM llvm-ld
просто объединяет несколько IR-файлов в один
– Eli Bendersky
5 February 2012 в 15:06
.bc
; также имейте в виду, что llvm-ld
может выступать в качестве интерфейса для системной привязки, т. е. мой предыдущий ответ с использованием llvm-ld -native
должен работать как ожидалось ....
– Christoph
5 February 2012 в 15:13
foo.bc
является файлом биткода LLVM
– Christoph
25 September 2014 в 22:23
clang -emit-llvm -o test.bc -c test.c && file test.bc: test.bc: LLVM IR bitcode
.
– ntc2
12 April 2016 в 17:11
Если у вас есть несколько исходных файлов, вы, вероятно, на самом деле хотите использовать оптимизацию времени соединения для вывода одного файла биткода для всей программы. Другие полученные ответы приведут к тому, что вы получите файл биткода для каждого исходного файла.
Вместо этого вы хотите скомпилировать с оптимизацией времени ссылки
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
и для конечный шаг связывания, добавьте аргумент -Wl, -plugin-opt = also-emit-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
Это дает вам как скомпилированную программу, так и бит-код, соответствующий это (program.bc). Вы можете в любое время изменить файл program.bc и перекомпилировать измененную программу в любое время, выполнив
clang program.bc -o program
, хотя помните, что вам нужно включить любые необходимые флаги компоновщика (для внешних библиотек, и т. д.) на этом этапе снова.
Обратите внимание, что для этого вам нужно использовать золотой линкер. Если вы хотите заставить clang использовать конкретный компоновщик, создайте символическую ссылку на этот компоновщик с именем «ld» в специальном каталоге под названием «fakebin» где-то на вашем компьютере и добавьте опцию
-B/home/jeremy/fakebin
в любые этапы соединения выше.
Если у вас несколько файлов, и вы не хотите вводить каждый файл, я бы рекомендовал вам выполнить следующие простые шаги (я использую clang-3.8
, но вы можете использовать любую другую версию):
.ll
файлы clang-3.8 -S -emit-llvm *.c
llvm-link-3.8 -S -v -o single.ll *.ll
opt-3.8 -S -O3 -aa -basicaaa -tbaa -licm single.ll -o optimised.ll
optimised.s
) llc-3.8 optimised.ll
a.out
) clang-3.8 optimised.s
-S
(на шаге 2), я указываю, что хочу создать вывод в LLVM IR. В принципе, все * .ll файлы в один. Я делаю это, чтобы проверить, что оптимизация действительно меняет код, т. Е. single.ll
и optimised.ll
теперь должны выглядеть по-другому (по коду), и вы также можете показать отчет, чтобы увидеть, есть ли какая-либо разница вообще.
– Kiko Fernandez
16 October 2017 в 07:39
Вы читали clang
документацию ? Вероятно, вы ищете -emit-llvm
.