Как заменить llvm-ld на clang?
Резюме: llvm-ld
был удален изВыпуск LLVM 3.2, Я пытаюсь понять, как использовать clang вместо него в моей системе сборки.
Обратите внимание, что я выяснил ответ на свой вопрос, когда писал его, но я все еще публикую его на тот случай, если он пригодится кому-то еще. Альтернативные ответы также приветствуются.
Подробности:
У меня есть процесс сборки, который сначала генерирует битовый код, используяclang++ -emit-llvm
, Затем я беру файлы с битовым кодом и связываю их вместе сllvm-link
, Затем я применяю некоторые стандартные проходы оптимизации сopt
, Затем я применяю другой пользовательский проход компилятора сopt
, Затем я применяю стандартные проходы оптимизации снова, используяopt
в третий раз. Наконец я беру вывод из последнего запускаopt
и использоватьllvm-link
связать с соответствующими библиотеками для генерации моего исполняемого файла. Когда я пытался заменитьllvm-link
сclang++
в этом процессе я получаю сообщение об ошибке:file not recognized: File format not recognized
Чтобы сделать этот вопрос более конкретным, я создал упрощенный пример того, что я пытаюсь сделать. Сначала есть два файла, которые я хочу скомпилировать и связать вместе
test1.cpp:
#include
int getNum();
int main()
{
int value = getNum();
printf("value is %d\n", value);
return 0;
}
test2.cpp
int getNum()
{
return 5;
}
Я выполнил следующую последовательность команд:
clang++ -emit-llvm -c test1.cpp test2.cpp
llvm-link -o test.bc1 test1.o test2.o
opt test.bc1 -o test.bc2 -std-compile-opts
(Обратите внимание, что в настоящее время я использую llvm 3.1, но яЯ пытаюсь выяснить шаги, которые будут работать для llvm 3.2. Я предполагаю, что смогу заставить корректно работать версию LLVM 3.1, используя clang вместо llvm-ld)
Тогда, если я бегу:
llvm-ld test.bc2 -o a.out -native
все хорошо иa.out
распечатывает 5.
Однако, если я бегу:
clang++ test.bc2 -o a.out
Тогда я получаю сообщение об ошибке:
test.bc2: file not recognized: File format not recognized clang-3:
error: linker command failed with exit code 1 (use -v to see invocation)
Очевидно, я знаю, что могу создать исполняемый файл, запустив clang непосредственно над файлами .cpp. Но я'Мне интересно, что лучший способ интеграцииclang
сopt
является.