注册 Clang 检查器时出错:"out-of-line-definition of register"
Error registering Clang Checker: "out-of-line-definition of register"
我正在尝试将自己的检查器添加到 clang 的静态分析器中。按照向 clang 添加检查器的说明,我完成了以下操作:
用MyChecker.cpp
写了一个骨架检查器:
using namespace clang;
using namespace ento;
namespace {
class MyChecker : public Checker<check::PreCall,
check::PostCall,
check::Location> {
public:
void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
void checkPostCall(const CallEvent &Call, CheckerContext &C) const;
};
}
void MyChecker::checkPreCall(const CallEvent &Call, CheckerContext &C) const {}
void MyChecker::checkPostCall(const CallEvent &Call, CheckerContext &C) const {}
void ento::registerMyChecker(CheckerManager &mgr) {
mgr.registerChecker<MyChecker>();
}
将源文件添加到检查器CMakeLists.txt
文件中:
...
MPI-Checker/MPIFunctionClassifier.cpp
MyChecker.cpp
NSAutoreleasePoolChecker.cpp
...
并在Checkers.td
中添加了一个条目:
def MyChecker : Checker<"MyChecker">,
HelpText<"MyChecker">,
DescFile<"MyChecker.cpp">;
当我尝试编译 clang 时,出现以下错误:
MyChecker.cpp:30:12: error: out-of-line definition of 'registerMyChecker' does not match any declaration in namespace 'clang::ento'
void ento::registerMyChecker(CheckerManager &mgr) {
^~~~~~~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.
为什么我无法注册我的检查器?
所以 clang 静态检查器注册依赖于包含静态检查器注册函数生成的声明的文件 -ClangSACheckers.h
.静态检查器源文件应包含该头文件并实现注册功能void ento::registerMyChecker(CheckerManager &mgr)
相关文章:
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 解决方案在第 25 行执行错误'out of bounds'
- C++ 向量加减抛出"expression: vector subscript out of range."错误
- 从 MSVC14 切换到 MSVC16 会导致"compiler is out of heap space (C1060)"错误
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 如何解决'vector subscript out of range'错误?
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 空集"Out of bound iterator"
- 在 std::unordered_map 中插入新的键/值对会导致"out of range"异常
- 注册 Clang 检查器时出错:"out-of-line-definition of register"
- QList::operator[]中的断言失败<T>:QJoysticks 中的"index out of range"
- 尝试获取矩阵的正确对角线会导致"vector out of range"错误
- 运算符方法和返回对象"out-of-scope"?
- 如何使用 mpi 分散修复"vector subscript out of range"?
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Vector subscript out of range",在返回声明?
- QList<T>::operator[]: "index out of range" 中的断言失败
- 多次调用存储过程时C++连接器"Commands out of sync" mySQL
- 如何处理C++'index out of bounds error'?
- 解决方法:"out of line definition of 'graph' does not match any declaration in 'graph'"