Clang和LLVM - 发布与调试版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clang和LLVM - 发布与调试版本相关的知识,希望对你有一定的参考价值。

这似乎是一个简单的问题,但需要花费大量时间才能弄明白......

instructions for building LLVM+Clang中,提到了Release和Debug配置。调试版本是:

  • 调试LLVM / Clang本身,

要么

  • 调试您尝试使用Clang + LLVM构建的应用程序?

我最初假设前者,但后来(1)它是默认的,(2)我找到了多组指令,指导我们构建调试模式,(3)我假设它会引起兴趣对于相对较小比例的用户 - 大多数人都希望使用Clang + LLVM,而不是深入研究优化编译器设计的复杂性。

我打算只使用Clang代替GCC来利用我所听到的更好的错误信息,但我需要调试它在GDB下生成的程序。 Clang的发布版本是否足够?

(请注意,调试版is a few GB可能需要很长时间才能构建,所以我宁愿找出简单的方法。)

另外,on that same page,它说我应该指定ONLY_TOOLS="tools you need",但哪里有可供选择的列表?

答案

前者是正确的 - 如果要调试编译器,只需要在调试模式下构建LLVM和Clang。如果要调试生成的应用程序,则需要使用调试符号对其进行编译 - 即在构建程序时将-g标志传递给Clang - 无论在何种模式下构建LLVM和Clang,都会启用它。

因此,根据您的需要,您应该在发布模式下进行编译。

至于你的问题 - 为什么是默认值 - 我猜它是因为假设如果你想运行它,你只需要获得一个pre-built binary而不是下载和构建源代码。

另外,关于你潜入的最后一个问题 - 我相信它指的是来自this list of LLVM tools的工具。

以上是关于Clang和LLVM - 发布与调试版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 上卸载准确的 LLVM 和 CLANG 版本

OS X 上的 LLVM 与 clang

IOS逆向-LLVM代码混淆

使用 LLVM 处理异常时出错

从 LLVM IR 获取精确的行/列调试信息

如何关闭llvm中的常量折叠优化