【发布时间】:2013-09-29 08:27:22
【问题描述】:
我在 llvm-dev 上阅读了this thread 并面临同样的问题:我无法将 llvm-ar 归档库与其他 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
问题是一样的: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 )之后,我也尝试了一个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!
那我该怎么办?
更新
然后我阅读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 仍然失败。
【问题讨论】:
-
您可以使用黄金 LTO 插件 - 可以选择保留合并的 IR 文件。
-
@SK-logic 谢谢。但是,那么确切的选择是什么?似乎 llvm 文档(llvm.org/docs/GoldPlugin.html) 包含的内容很少。
-
叫
also-emit-llvm -
谢谢,有相关文件吗?我不熟悉 ld 选项。
-
将其用作“-plugin-opt=also-emit-llvm”