【问题标题】:Is there a way to make Clang output LLVM IR alongside executable?有没有办法让 Clang 输出 LLVM IR 和可执行文件?
【发布时间】:2019-01-15 17:23:29
【问题描述】:

我知道您可以使用 -emit-llvm 选项使 clang 输出 LLVM IR,但这使它成为唯一的输出。

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

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

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

【问题讨论】:

    标签: compilation clang clang++ llvm-clang llvm-ir


    【解决方案1】:

    至少有两种方法可以实现:

    1. -flto: 你会得到一个 LLVM Bitcode 文件,而不是每个目标文件(从汇编编译的文件除外,它们仍然是目标文件)。
    2. -fembed-bitcode:clang 将在最终的可执行文件中添加另一个部分,其中包含所有 LLVM 位代码文件(同样,除了汇编文件,它们仍然是目标文件)。然后,您可以使用LibEBC 提取所有这些文件。

    无论采用哪种方法,都必须使用llvm-dis 工具将LLVM Bitcode 文件转换为LLVM IR 文件。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多