如何使用 llvm-ar 生成的存档文件?

How can I use llvm-ar generated archive file?

llvm-ar 将几个 LLVM 位码文件归档到一个可以链接到程序中的归档库中。存档操作按预期工作。另外,可以使用 llvm-nm 来显示生成的存档中的所有符号。

但是,我注意到生成的存档不能被其他标准 llvm 工具使用,例如 llcllillvm-link 直接使用。

为了使用生成的归档文件,我必须从归档文件中提取所有的位码文件,然后直接通过llc使用它们。

问题:

  1. 是否有更优雅或更有效的方法来使用 llvm-ar 生成的存档文件?

  2. clang可以直接使用bitcode存档文件如下:

// assumes hello.bc is valid bitcode file and it is built successfully
clang-3.8  -o main main.c hello.bc

// ar hello.bc into lib libhello.bca
llvm-ar-3.8 rcs libhello.bca hello.bc

llvm-nm libhello.bca // has below output

   hello.bc:
   ---------------- T outupt
                    U puts

clang-3.8 -o main main.c libhello.bca // has below error

  libhello.bca: error adding symbols: File format not recognized
  clang: error: linker command failed with exit code 1 (use -v to see invocation)

LLVM 工具,如 llclliopt 等无法直接对位码存档进行操作。你必须在 运行 打包它们之前将其解压。或者,您可以 link 将项目归档到一个单一的位码文件中,但这与拥有归档不同,所以这取决于您是否适合。

至于 clang,您可以将位码存档与源文件和库一起传递,它会做正确的事情 - 解压它,运行 传递,编译为目标文件和 link 进入最终的二进制文件。