c++ - clang 教程 "missing file"上的段错误

标签 c++ clang llvm llvm-clang

我一直在尝试运行一些 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

知道发生了什么吗?

最佳答案

第 1 步。重建 llvm 和 clang:

 cmake ... -DLLVM_ENABLE_ASSERTIONS=1

 cmake ... -DCMAKE_BUILD_TYPE=Debug

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

第 2 步。修复目标信息。此代码在过去几年中已更改过几次,因此您需要查找执行此操作的地方。查看例如 llvm/tools/llc/llc.cpp 中的代码是一个很好的起点。由于这在几乎每个版本中都是不同的,我不会挖掘 2-3 年前的代码来弄清楚你需要做什么,但你确实需要初始化一些目标,否则你的编译将不会成功。如果您启用断言,您很可能会在合适的地方获得断言。

关于c++ - clang 教程 "missing file"上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35543648/

相关文章:

c++ - 在字典中查找单词模式,高性能

c++ - Getline 非常奇怪地读取 csv

c++ - 如何从 LLVM pass 执行 yosys pass?

c - LLVM 优化错误或未定义的行为?

c++ - 在 RTTI 代码中使用非 RTTI 接口(interface)

c++ - 如何用QAbstractItemDelegate的画图在QListVIew的单元格中心设置QRect?

c++ - 如何仅使用C++中的迭代器正确地迭代3D vector ?

ios - __LP64__ 和 __arm64__ 在 Cocoa 中存在哪些定义可以在编译时区分平台?它们在哪里或如何定义?

c++ - 我可以对同一项目中的某些文件使用不同的 .clang_format 吗?

带位字段的 Clang 静态分析器误报(C 代码)