我在llvm-dev上阅读了this thread并遇到了同样的问题:我无法将 llvm-ar archieve库与其他 bitcode 文件链接起来在llvm-link
的帮助下进入另一个 bitcode文件。
clang -emit-llvm -g -c -o main.bc main.c
clang -emit-llvm -g -c -o calc.bc calc.c
llvm-ar rcs libcalc.la calc.bc
llvm-link libcalc.la main.bc -o test
问题是一样的:llvm-link
抱怨
llvm-link: libcalc.la:1:2: error: expected integer
!<arch>
^
在阅读How to link object to libraries with LLVM >= 3.1 ? ( no GNU ld )之后,我还尝试了 llvm-ld 的llvm2.9版本。
llvm-ld --disable-opt libcalc.la main.bc -o test
但libcalc.la
未正确地链接到模块中并lli
报告:
LLVM ERROR: Program used external function 'Square' which could not be resolved!
那我该怎么办?
更新
然后我读了Can't link against static library when compiling objects from LLVM bitcode.并在更改订单时发现 llvm-ld 工作:
llvm-ld --disable-opt main.bc libcalc.la -o test
但llvm-link
仍然失败。
答案 0 :(得分:7)
llvm-link
不支持bitcode档案,AFAIK。它简单地遍历它提供的输入文件,并尝试将每个文件解析为bitcode文件(二进制或文本LLVM IR)。llvm-ld
在较新的LLVM中不存在,因此我建议完全远离它。只需将.bc
个文件与llvm-link
链接在一起即可。无论如何,bitcode文件的归档对于链接器没有与本机链接相同的好处。
答案 1 :(得分:0)
您不需要存档来链接您的bitcode文件:
clang -emit-llvm -g -c -o main.bc main.c
clang -emit-llvm -g -c -o calc.bc calc.c
clang main.bc calc.bc -o test