LLVM で記述されたプロファイラーを使用して Spec2K6 ベンチマークでいくつかのファイルをプロファイリングしていますが、複数の .bc ファイルをリンクする正しい方法を理解できません。
たとえば、ベンチマークには、xexit.c の xexit メソッドを使用する xmalloc.c で定義された xmalloc メソッドを使用する concat.c があります。
次のコマンドを使用して、プロファイルを作成する前に複数の .bc ファイルをリンクしています -
CFLAGS='-D_GNU_SOURCE -D_XOPEN_SOURCE=600 -c -Wall -pedantic -Wno-long-long -g -O0 - I/net/x/silkyar/llvm/include -I/net/403.gcc/src'
clang $CFLAGS -emit-llvm -c 403.gcc/src/concat.c -o concat.bc
clang $CFLAGS -emit-llvm -c 403.gcc/src/xexit.c -o xexit.bc
clang $CFLAGS -emit-llvm -c 403.gcc/src/xmalloc.c -o xmalloc.bc
llvm-link concat.bc xexit.bc xmalloc.bc -o a.bc
llc a.bc -o a.s
g++ -o final a.s
./final
しかし、これは llvm-link: link error in 'xexit.bc': Linking globals named 'xexit': symbol multiple defined! で失敗します。/tmp/ccUldT0Y.o:(.debug_info+0x1e): .Lline_table_start0'
/tmp/ccUldT0Y.o:(.debug_info+0x42f): undefined reference to
.Lline_table_start1' への未定義の参照 /tmp/ccUldT0Y.o:(.debug_info+0x4a0): `.Lline_table_start2' への未定義の参照 collect2: ld が 1 つの終了ステータスを返しました
llvm-link の仕組みについて誰か教えてください。
ありがとう。