如何使用llvm库

时间:2016-12-18 15:55:18

标签: c++ llvm static-libraries llvm-clang llvm-ir

我正在一个由一些C ++团队组成的项目中工作。每个团队都提供库,我们的团队正在将这些库集成到前端应用程序中。

应用程序是跨平台的,因此这意味着其他团队必须提供针对不同平台/ CPU架构/配置编译的相同(静态)库。例如。我们有Visual Studio 2015 / 2013,32bit / 64bit,linux,Debug / Release等。

减少这些静态库"清单"的数量会很好,所以我正在研究Clang / LLVM。这个想法是将静态库编译成LLVM bitcode,并使用llvm-ar工具创建llvm静态库。当我们必须为特定平台制作二进制文件时,我们将使用llc(LLVM平台编译器)来创建本机代码静态库并与平台链接器进行链接。

问题:

  • 有没有更好的方法来实现我想要实现的目标?
  • 该公司似乎不支持编译静态库,只支持单个翻译单元(.bc - > .o)。当然我可以提取每个单独的bitcode文件,将它组装到本机对象文件并使用平台库管理器工具(lib / ar)来创建静态库,但我想知道是否有更简化的解决方案。
  • 黄金链接器似乎是我需要的东西,但似乎仅限于ELF格式。我必须支持Windows / Linux和IOS

1 个答案:

答案 0 :(得分:1)

从特定于目标的语言和特定于平台的语言(C / C ++)生成的LLVM IR不会是目标中立的。考虑类型大小,对齐,ABI要求等。更不用说像预处理器这样的纯源代码功能。所以,不,你想到的方法根本不起作用。

有关详情,请参阅LLVM bitcode cross-platform