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;
}

Это заставляет меня задуматься, делаю ли я что-то в корне неправильно...

Спасибо!

0 ответов

Другие вопросы по тегам