7

我已经在 llvm-dev 上阅读了这个线程并且面临同样问题无法在.llvm-link

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>
 ^

在阅读如何使用 LLVM >= 3.1 将对象链接到库之后?(没有 GNU ld),我还尝试了 llvm2.9 版本的llvm-ld

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!

所以我该怎么做?

更新

然后我阅读了从 LLVM 位码编译对象时无法链接静态库。并在更改订单时发现llvm-ld有效:

llvm-ld --disable-opt  main.bc libcalc.la -o test

llvm-link仍然失败。

4

2 回答 2

7
  • llvm-link不支持位码档案,AFAIK。它只是简单地检查它提供的输入文件,并尝试将每个文件解析为位码文件(二进制或文本 LLVM IR)。
  • llvm-ld在较新的 LLVM 中不存在,所以我建议完全远离它。

只需将单独的.bc文件与llvm-link. 无论如何,位码文件的归档对于链接器而言并没有与本机链接相同的好处。

于 2013-09-24T12:51:11.427 回答
-1

您不需要归档器来链接您的位码文件:

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
于 2014-04-03T10:56:43.263 回答