LLVM コンパイラ パスを開発しています。次の方法でパスを実行します。
LLVM ビットコードにコンパイル
clang foo.c -emit-llvm -c -o foo.bc
opt を使用して foo.bc を実行します (この手順を実行しなくてもエラーが発生します)。
コンパイルしてオブジェクト ファイルに戻す
clang -c -o foo.o foo.bc
現在、foo.o は静的ライブラリの一部である可能性があります。
ar rc libfoo.a foo.o
すべての C ファイルがこの方法でコンパイルされている場合、libfoo.a に対してリンクできません。
clang libfoo.a linkme.o -o linkme linkme.o:linkme.bc:function main: error: undefined reference to 'foo' clang: error: linker command failed with exit code 1 (use -v to see invocation)
ソース ファイル:
foo.c:
int foo(int a)
{
return a;
}
foo.h
int foo(int a);
linkme.c
#include "foo.h"
int main(int argc, char *argv[])
{
foo(6);
return 0;
}