Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compilation 有没有一种方法可以使铿锵输出LLVM IR与可执行文件一起运行?_Compilation_Clang_Clang++_Llvm Clang_Llvm Ir - Fatal编程技术网

Compilation 有没有一种方法可以使铿锵输出LLVM IR与可执行文件一起运行?

Compilation 有没有一种方法可以使铿锵输出LLVM IR与可执行文件一起运行?,compilation,clang,clang++,llvm-clang,llvm-ir,Compilation,Clang,Clang++,Llvm Clang,Llvm Ir,我知道,您可以使用-emit LLVM选项生成铿锵输出LLVM IR,但是这使它成为唯一的输出 我想知道是否有一些编译器选项的组合,可以使clang的功能与以前完全一样,但也会产生.ll文件作为副产品 我现在面临的问题是一个具有非常复杂的基于cmake的构建的项目,为此我只能更改铿锵编译选项。我想为它生成llvm IR文件,但不幸的是,如果我只是通过-emit llvm,CMake将失败,因为它的编译器测试/健全性检查没有通过(因为生成的是.ll文件而不是有效的可执行文件) 有没有办法让clan

我知道,您可以使用
-emit LLVM
选项生成铿锵输出LLVM IR,但是这使它成为唯一的输出

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

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


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

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

  • -flto
    :您将获得一个LLVM位码文件,而不是每个对象文件(从程序集编译的文件除外,它们仍然是对象文件)
  • -fembed bitcode
    :clang将在最终可执行文件中添加另一个部分,该部分包含所有LLVM位代码文件(同样,除了程序集文件,它们仍然是对象文件)。然后,您可以使用来提取所有这些文件
  • 无论采用哪种方法,都必须使用
    llvm-dis
    工具将llvm位代码文件转换为llvm-IR文件

    我希望有帮助