如何使用 llvm-ar 生成的存档文件?
How can I use llvm-ar generated archive file?
llvm-ar
将几个 LLVM 位码文件归档到一个可以链接到程序中的归档库中。存档操作按预期工作。另外,可以使用 llvm-nm
来显示生成的存档中的所有符号。
但是,我注意到生成的存档不能被其他标准 llvm 工具使用,例如 llc
、lli
和 llvm-link
直接使用。
为了使用生成的归档文件,我必须从归档文件中提取所有的位码文件,然后直接通过llc
使用它们。
问题:
是否有更优雅或更有效的方法来使用 llvm-ar
生成的存档文件?
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 工具,如 llc
、lli
、opt
等无法直接对位码存档进行操作。你必须在 运行 打包它们之前将其解压。或者,您可以 link 将项目归档到一个单一的位码文件中,但这与拥有归档不同,所以这取决于您是否适合。
至于 clang
,您可以将位码存档与源文件和库一起传递,它会做正确的事情 - 解压它,运行 传递,编译为目标文件和 link 进入最终的二进制文件。
llvm-ar
将几个 LLVM 位码文件归档到一个可以链接到程序中的归档库中。存档操作按预期工作。另外,可以使用 llvm-nm
来显示生成的存档中的所有符号。
但是,我注意到生成的存档不能被其他标准 llvm 工具使用,例如 llc
、lli
和 llvm-link
直接使用。
为了使用生成的归档文件,我必须从归档文件中提取所有的位码文件,然后直接通过llc
使用它们。
问题:
是否有更优雅或更有效的方法来使用
llvm-ar
生成的存档文件?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 工具,如 llc
、lli
、opt
等无法直接对位码存档进行操作。你必须在 运行 打包它们之前将其解压。或者,您可以 link 将项目归档到一个单一的位码文件中,但这与拥有归档不同,所以这取决于您是否适合。
至于 clang
,您可以将位码存档与源文件和库一起传递,它会做正确的事情 - 解压它,运行 传递,编译为目标文件和 link 进入最终的二进制文件。