clang tutorials"缺少文件"

时间:2016-02-21 23:47:23

标签: c++ clang llvm llvm-clang

我一直试图运行一些像this one这样的铿锵教程,我不断得到我用GDB跟踪的段错误:

Starting program: /analyser/a.out PrintFunctions.cpp
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
clang::Builtin::Context::InitializeTarget (this=0x6d1fe8, Target=...) at /opt/llvm/src/llvm/tools/clang/lib/Basic/Builtins.cpp:46
46      /opt/llvm/src/llvm/tools/clang/lib/Basic/Builtins.cpp: No such file or directory.
(gdb) bt
#0  clang::Builtin::Context::InitializeTarget (this=0x6d1fe8, Target=...) at /opt/llvm/src/llvm/tools/clang/lib/Basic/Builtins.cpp:46
#1  0x00007fffedff47ba in clang::Preprocessor::Initialize (this=0x6d1d90, Target=...) at /opt/llvm/src/llvm/tools/clang/lib/Lex/Preprocessor.cpp:181
#2  0x00007ffff0efca72 in clang::CompilerInstance::createPreprocessor (this=0x7fffffffe5d8, TUKind=<optimized out>)
    at /opt/llvm/src/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:306
#3  0x0000000000402bcd in main (argc=2, argv=0x0) at PrintFunctions.cpp:86
(gdb) quit

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:0)

步骤1.重建llvm&amp;铿锵道:

 cmake ... -DLLVM_ENABLE_ASSERTIONS=1

 cmake ... -DCMAKE_BUILD_TYPE=Debug

后者将允许你实际进入clang和llvm中的函数,但是当你跳过初始化或传递错误的参数等时,前者至少会给你一些公平的警告,而不是在某些神秘的地方崩溃它实际上被使用(通常比断言晚得多)

步骤2.修复目标信息。在过去的几年里,这段代码已经改变了几次,所以你需要在某个地方查找。查看例如llvm/tools/llc/llc.cpp中的代码是一个很好的起点。由于几乎每个版本都有所不同,我不打算从2 - 3年前挖出代码来弄清楚你需要做什么,但是你需要初始化一些目标,或者你的编译不会成功。如果启用断言,很可能会在合适的位置获得断言。

答案 1 :(得分:0)

调试器抱怨它无法找到包含clang::Builtin::Context::InitializeTarget的源文件,这是程序崩溃的地方。虽然可能是代码被破坏,但 非常 不太可能。请求调试器进行回溯,这样可以让您了解导致最终崩溃的错误参数来自何处。

它不会丢失&#34;丢失文件&#34;。