问题 Clang和LLVM - 发布与调试版本


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

在里面 构建LLVM + Clang的说明, 一个 发布 和a 调试 提到配置。调试版本是:

  • 调试LLVM / Clang本身,

要么

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

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

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

(注意Debug版本 是几GB 并且可能需要很长时间才能构建,所以我宁愿找出简单的方法。)

加, 在同一页面上,它说我应该指明 ONLY_TOOLS="tools you need",但哪个列表可供选择?


8432
2018-02-08 08:44


起源



答案:


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

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

至于你的问题 - 为什么这是默认的 - 我猜它是因为假设如果你想要运行它,你只需要获得一个 预先构建的二进制文件 而不是下载和构建源代码。

另外,关于你潜入的最后一个问题 - 我相信它指的是来自的工具 这个LLVM工具列表


14
2018-02-08 11:04



在某个地方,我已经读过预先构建的二进制文件在某些​​方面针对Visual Studio,实际上,尝试它,(并指定系统包含路径 isystem 如上所述 这里  $ clang++ -std=c++11 -isystem /usr/local/include -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++ -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++/mingw32/ -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++/backward/ -isystem /mingw/include/ -isystem /mingw/lib/gcc/mingw32/4.8.1/include -isystem /mingw/lib/gcc/mingw32/4.8.1/include-fixed/ b.cpp,我得到: - Evgeni Sergeev
... C:/m/lib/gcc/mingw32/4.8.1/include\x86intrin.h:27: C:/m/lib/gcc/mingw32/4.8.1/include\ia32intrin.h:41:10: error: use of undeclared identifier '__builtin_ia32_bsrsi' return __builtin_ia32_bsrsi (__X); - Evgeni Sergeev
尝试没多少运气 make 在MinGW / MSYS下最新的SVN版本或最新版本3.4:我明白了 llvm/lib/Support/Windows/Process.inc:366:32: error: 'rand_s' was not declared in this scope。所以放弃了,因为虽然我确信在经过一些故障排除后我可以让它在我的系统上运行,但它必须足够容易让其他人在10个简单的步骤中完成,并且还能够面向未来,建议说明我要分发。 - Evgeni Sergeev
哦是的,也试过下载 i686-w64-mingw32-clang-3.2-release-win32_rubenvb.7z 从 sourceforge.net/projects/mingw-w64/files/... (有的 w64 在其中,但在32位和64位版本下运行)但是 那  clang++ 段错误,并在其下运行 gdb,堆栈跟踪没有显示任何明显的东西。 - Evgeni Sergeev
@EvgeniSergeev我担心我不知道如何帮助你...你应该打开另一个关于这些问题的问题(或者在LLVM-dev邮件列表上询问)。 - Oak


答案:


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

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

至于你的问题 - 为什么这是默认的 - 我猜它是因为假设如果你想要运行它,你只需要获得一个 预先构建的二进制文件 而不是下载和构建源代码。

另外,关于你潜入的最后一个问题 - 我相信它指的是来自的工具 这个LLVM工具列表


14
2018-02-08 11:04



在某个地方,我已经读过预先构建的二进制文件在某些​​方面针对Visual Studio,实际上,尝试它,(并指定系统包含路径 isystem 如上所述 这里  $ clang++ -std=c++11 -isystem /usr/local/include -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++ -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++/mingw32/ -isystem /mingw/lib/gcc/mingw32/4.8.1/include/c++/backward/ -isystem /mingw/include/ -isystem /mingw/lib/gcc/mingw32/4.8.1/include -isystem /mingw/lib/gcc/mingw32/4.8.1/include-fixed/ b.cpp,我得到: - Evgeni Sergeev
... C:/m/lib/gcc/mingw32/4.8.1/include\x86intrin.h:27: C:/m/lib/gcc/mingw32/4.8.1/include\ia32intrin.h:41:10: error: use of undeclared identifier '__builtin_ia32_bsrsi' return __builtin_ia32_bsrsi (__X); - Evgeni Sergeev
尝试没多少运气 make 在MinGW / MSYS下最新的SVN版本或最新版本3.4:我明白了 llvm/lib/Support/Windows/Process.inc:366:32: error: 'rand_s' was not declared in this scope。所以放弃了,因为虽然我确信在经过一些故障排除后我可以让它在我的系统上运行,但它必须足够容易让其他人在10个简单的步骤中完成,并且还能够面向未来,建议说明我要分发。 - Evgeni Sergeev
哦是的,也试过下载 i686-w64-mingw32-clang-3.2-release-win32_rubenvb.7z 从 sourceforge.net/projects/mingw-w64/files/... (有的 w64 在其中,但在32位和64位版本下运行)但是 那  clang++ 段错误,并在其下运行 gdb,堆栈跟踪没有显示任何明显的东西。 - Evgeni Sergeev
@EvgeniSergeev我担心我不知道如何帮助你...你应该打开另一个关于这些问题的问题(或者在LLVM-dev邮件列表上询问)。 - Oak