LLVM с op & ld - ошибка компоновки
Я пытаюсь ознакомиться с LLVM & clang для проекта, где я буду работать с различными оптимизациями. Поэтому мне нужно взаимодействовать с LLVM не только через clang, но и использовать opt & llc. Теперь мне не удается связать очень простой пример с использованием библиотеки C.
Код (main.c):
#include<stdio.h>
int main() {
printf("hallo");
}
LLVM Flow & ld в качестве компоновщика:
clang -c -emit-llvm main.c
opt -O3 main.bc -o optimized.bc
llc -march=x86-64 -filetype=obj optimized.bc -o prog.o
ld --verbose -static -lc prog.o -o prog --entry main
Ошибка вывода ld:
...
attempt to open //usr/local/lib/x86_64-linux-gnu/libc.a failed
attempt to open //lib/x86_64-linux-gnu/libc.a failed
attempt to open //usr/lib/x86_64-linux-gnu/libc.a succeeded
attempt to open prog.o succeeded
prog.o
prog.o: In function `main':
optimized.bc:(.text+0xc): undefined reference to `printf'
Я немного озадачен этой ошибкой:
- Я использую -lc, который должен связать библиотеку stdc
- Вывод ld предполагает, что libc был найден
- Почему ld жалуется на ошибку в IR-файле LLVM?
Еще более тупые ссылки на C-программы, но дают мне ошибку сегментации и выполнения.
Код:
int main() {
int a = 5;
}
Это заставляет меня задуматься, делаю ли я что-то в корне неправильно...
Спасибо!