我一直在尝试运行一些像this one这样的clang教程,并且不断地得到我用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知道是怎么回事吗?
发布于 2016-02-22 08:26:23
步骤1.使用以下命令重新构建llvm & clang:
cmake ... -DLLVM_ENABLE_ASSERTIONS=1或
cmake ... -DCMAKE_BUILD_TYPE=Debug后者将允许你实际进入clang和llvm中的函数,但前者至少会在你跳过初始化或传递错误参数等时给你一些公平的警告,而不是在实际使用时在某个神秘的地方崩溃(这通常比断言晚得多)
步骤2.确定目标信息。在过去的几年中,这段代码已经更改了几次,因此您需要查找执行此操作的地方。例如,查看llvm/tools/llc/llc.cpp中的代码是一个很好的起点。由于这在几乎每个版本中都是不同的,我不会挖掘出2-3年前的代码来确切地指出您需要做什么,但您确实需要初始化一些目标,否则您的编译将不会成功。如果启用断言,很可能会在合适的位置得到断言。
发布于 2016-02-22 09:28:03
调试器报告它找不到包含clang::Builtin::Context::InitializeTarget的源文件,这就是您的程序崩溃的地方。虽然这可能是代码被破坏,但这是极不可能的。向调试器请求回溯,这应该会让您知道导致最终崩溃的错误参数来自何处。
它不会在“丢失的文件”上出现段错误。
https://stackoverflow.com/questions/35543648
复制相似问题