我正在使用LLVM中編寫的探查器分析Spec2K6基準測試中的幾個文件,並且無法理解鏈接多個.bc文件的正確方法。在llvm中鏈接
例如,基準具有concat.c,它使用在xmalloc.c定義的的xmalloc方法,它使用從xexit.c xexit方法
我使用下面的命令之前鏈接多個文件.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鏈接:鏈接錯誤「xexit.bc」:鏈接全局命名爲「xexit」:象徵多次定義! /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鏈接的作品。
謝謝。
你可以在舊的LLVM版本找到一個非常有用的工具'llvm-ld',它模仿了GNU ld的行爲。不幸的是,稍後有人將其刪除。 – 2013-02-12 08:49:34