プロジェクトのLLVMとclangに慣れようとしています。そこでは、さまざまな最適化を行います。したがって、clang だけでなく、opt & llc を使用して LLVM と対話する必要があります。現在、C ライブラリを使用した非常に基本的な例のリンクに失敗しています。
コード (main.c):
#include<stdio.h>
int main() {
printf("hallo");
}
LLVM フロー & リンカとしての 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 が見つかったことを示しています
- LLVM IR ファイルのエラーについて ld が文句を言うのはなぜですか?
さらに馬鹿げたCプログラムがリンクしますが、セグメンテーション違反と実行が発生します。
コード:
int main() {
int a = 5;
}
そういうのは、根本的に間違ったことをしているのではないかと思います...
どうも!