我正在尝试为一个项目熟悉 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;
}
这让我想知道我是否在做一些根本错误的事情......
谢谢!