代码之家  ›  专栏  ›  技术社区  ›  Dan M.

有没有办法使clang输出llvm-ir与可执行文件并排?

  •  1
  • Dan M.  · 技术社区  · 7 年前

    我知道你可以用 -emit-llvm 但这使它成为唯一的输出。

    我想知道是否有一些编译器选项的组合可以使clang函数与以前完全一样,但是也会产生 .ll 作为副产品的文件?

    我现在面临的问题是一个具有非常复杂的基于cmake的构建的项目,对此我只能更改clang编译选项。我想为它生成llvm-ir文件,但不幸的是,如果我只是通过 -发射llvm ,cmake失败,因为它的编译器测试/健全性检查不通过(因为生成了.ll文件而不是有效的可执行文件)。

    有没有办法让clang同时生成exe/object和.ll文件?或者以其他方式解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  1
  •   AlexDenisov    7 年前

    实现这一目标至少有两种方法:

    1. -flto :您将得到一个llvm位码文件,而不是每个对象文件(除了从程序集编译的文件外,它们仍然是对象文件)。
    2. -fembed-bitcode :clang将在最终可执行文件中添加另一节,其中包含所有llvm位代码文件(同样,除了程序集文件,它们仍然是对象文件)。那么,你可以使用 LibEBC 提取所有这些文件。

    不管你采取哪种方法,你都必须使用 llvm-dis 用于将llvm位代码文件转换为llvm ir文件的工具。

    我希望有帮助。