【问题标题】:Libclang returning incorrect cursor types (stdlib and namespaced types)Libclang 返回不正确的游标类型(stdlib 和命名空间类型)
【发布时间】:2015-06-02 17:31:42
【问题描述】:

我正在使用 libclang 来做一些 C++ 的基本反射。我正在为标题创建一个翻译单元,然后使用光标访问所有树元素,在某些情况下,我会退回到 qualtypes 以获取必要的信息。现在的问题是 libclang 返回的游标类型不正确。对于下面的示例头文件:

#include <vector>
#include <string>

namespace SomeNamespace
{
    struct B
    {
        std::string m_string;
        std::vector<float> m_vector;
    };
}

我使用带有以下输入的 clang_parseTranslationUnit2 对其进行解析:

参数: "-x", "c++"

选项: CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_Incomplete;

现在访问 struct B 的字段时,我得到:

CXType_Int 将光标指向 m_vector 而不是 CXtype_Unexposed

但对于 std::string 成员 m_string,我得到 CXType_Unexposed,它允许我访问该字段并提取必要的信息。当访问字符串的字段时,我正确地获得了“命名空间”然后是“typeref”游标类型。

我完全不知道发生了什么,为什么 lib clang 无法理解 std::vector 类型?

我在 2015 年 6 月 1 日获得了最新的 libclang 版本。

【问题讨论】:

  • 你找到解决办法了吗?
  • 我也有同样的问题,你找到解决办法了吗?
  • 我对更高版本的 clang 没有问题。

标签: clang clang++ llvm-clang libclang


【解决方案1】:

我在这里找到了答案https://stackoverflow.com/a/66702426

基本上,libclang 中任何内容的默认类型显然是 int。如果解析失败,您可能会看到类型显示为 int 而不是正确的类型。解析后检查诊断,如果有则失败,而不是继续打印错误类型。

【讨论】:

    【解决方案2】:

    尝试在编译标志中添加 clang headers 目录

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 2022-12-31
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多