是否可以将bitcode与llvm-ar archieve链接到一个bitcode文件中?

时间:2013-09-24 08:13:17

标签: c linker clang llvm

我在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仍然失败。

2 个答案:

答案 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