0

我正在尝试为一个项目熟悉 LLVM 和 clang,我将在其中使用不同的优化。因此,我不仅需要通过 clang 与 LLVM 交互,还需要使用 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 抱怨 LLVM IR 文件中的错误?

一个更加愚蠢的 C 程序链接,但给了我一个分段错误和执行。

代码:

int main() {
    int a = 5;
}

这让我想知道我是否在做一些根本错误的事情......

谢谢!

4

0 回答 0