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

Hon*_*hen 7 c linker llvm clang

我已经在llvm-dev上阅读了这个帖子并且遇到了同样的问题:我无法在其帮助下将llvm-ar archieve库与其他bitcode文件链接到另一个bitcode文件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
Run Code Online (Sandbox Code Playgroud)

问题是一样的:llvm-link抱怨

llvm-link: libcalc.la:1:2: error: expected integer
!<arch>
 ^
Run Code Online (Sandbox Code Playgroud)

阅读如何将对象链接到LLVM> = 3.1的库?(没有GNU ld),我也尝试过llvm -9版本的llvm2.9 .

llvm-ld --disable-opt libcalc.la main.bc -o test
Run Code Online (Sandbox Code Playgroud)

然而,libcalc.la没有连接到模块正确和lli报告:

LLVM ERROR: Program used external function 'Square' which could not be resolved!
Run Code Online (Sandbox Code Playgroud)

所以我该怎么做?

UPDATE

然后我读取从LLVM bitcode编译对象时无法链接到静态库.并在更改订单时发现llvm-ld工作:

llvm-ld --disable-opt  main.bc libcalc.la -o test
Run Code Online (Sandbox Code Playgroud)

llvm-link仍然失败.

Eli*_*sky 7

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

只需将单独的.bc文件链接在一起即可llvm-link.无论如何,bitcode文件的归档对于链接器没有与本机链接相同的好处.

  • @HongxuChen:您可以建议llvmdev @提供一个允许`llvm-link`读取档案的补丁:-)此外,请注意它是一个非常小的小工具,并且自己实现其功能(包括增强功能)是微不足道的 (3认同)