问题标签 [libclang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3704 浏览

c++ - libclang 获取原始值

如何使用 libclang 获取原始文字的值?

例如,如果我有一个光标类型为 CXCursor_IntegerLiteral 的 CXCursor,我该如何提取文字值。


更新:

我在使用 libclang 时遇到了很多问题。我强烈建议完全避免它,而是使用 clang 提供的 C++ 接口。C++ 接口非常有用并且有很好的文档记录:http ://clang.llvm.org/doxygen/annotated.html

我现在看到的 libclang 的唯一目的是使用以下代码为您生成 ASTUnit 对象(否则并不容易):

现在你可能会说 libclang 是稳定的,而 C++ 接口不是。这几乎无关紧要,因为你花时间用 libclang 找出 AST 并用它创建 kludges 无论如何都会浪费你很多时间。我会尽快花几个小时来修复版本升级后无法编译的代码(如果需要的话)。

0 投票
0 回答
294 浏览

c - libClang 上的“当存在 '-fsyntax-only' 时未使用链接器输入”

有没有人在尝试使用 libclang 在代码上运行由 clang 生成的可执行文件时遇到过这种问题(如果我也使用 gcc 编译也会出现这种情况)?使用少量打印我注意到它发生在以下函数调用中:fprintf(stderr, "%s\n", clang_getCString(String));在这种情况下,有来自 Cstring 的输出。我正在使用 Clang -lclang 进行编译

谢谢。

0 投票
1 回答
2168 浏览

c++ - 如何使用 libclang 确定成员函数是 const 还是 volatile?

我有一个CXCursorkind的实例CXCursor_CXXMethod。我想知道函数是const还是volatile,例如:

我在 libclang 的文档中找不到任何有用的东西。我试过了clang_isConstQualifiedTypeclang_isVolatileQualifiedType但这些似乎总是返回0C++ 成员函数类型。

0 投票
1 回答
1539 浏览

llvm - 使用libclang,如何在函数调用时获取游标声明类型的游标?

我有一个光标指向一个函数调用,该函数调用的原型在包含的头文件中声明。我想获取此类声明的位置,但是从下面的 gdb 输出中可以看出,在获取函数调用的类型后,获取声明类型的光标失败,如何正确处理?

这是所有相关的源代码:

0 投票
3 回答
4226 浏览

c++ - 检索有关预处理器指令的信息

我最近开始使用 libclang 来解析 C 文件。我遇到的问题显然是,libclang 在生成 AST 之前启动了预处理器。我想禁止预处理器运行,而是获得预处理器指令在文件中的信息......

我使用以下 python 脚本(cindex.py 和 libclang)

哪个输出

对于以下 C 代码:

我想要的是在代码中为我的#define 获取 DEFINE_DECL HELLO_WORLD(目前我什么也得不到)。当然,我的#include 也有类似的声明。这可能吗?

编辑:基本上,我想在没有扩展预处理器指令的情况下解析文件。

0 投票
1 回答
627 浏览

c++ - 使用 libclang,如何启用和禁用特定警告?

我正在尝试使用 libclang API 以编程方式分析 C++ 项目。我的clang编译得很好,我的工具正在正确解析生成的AST,但我不知道如何打开/关闭特定的警告。

这是相关的代码片段,我想启用/禁用“未使用的变量”警告:

0 投票
2 回答
2197 浏览

clang - libclang:缺少 AST 中的一些语句?

我编写了一个测试程序 (parse_ast.c) 来解析 ac 源文件 (tt.c) 以查看 libclang 是如何工作的,输出是 AST 的层次结构:

这是测试文件:

输出显示如下:

我们可以看到三个函数(第 7 行的 direct_write/第 11 行的 indirect_write/第 15 行的 main),大多数语句都可以在 AST 中找到,但我找不到任何代表第 12 行的语句和第17行。有人知道原因吗?

我在 debian 2.6.32 上挤压,在 clang 3.1 和 3.2 上测试过(从源代码编译)。

这是程序 parse_ast.c:

更新

问题是由于缺少头文件 stddef.h,它在 libclang 的邮件列表http://clang-developers.42468.n3.nabble.com/libclang-missing-some-statements-in-the-AST-td4029641中得到答复.html

0 投票
1 回答
10191 浏览

llvm - 关于 libclang 的任何教程?

我一直在寻找一些易于理解的 libclang 指南。我在这里或其他论坛上看到过一些主题,但唯一推荐的信息来源是 libclang 源/doxygen doc、vim 的 clang 完整插件或Thinking Beyond the Compiler演示文稿。但是,它们都没有提供有关实际使用的信息。我对实现代码完成/语法突出显示(可能是一些基本的重构/解析)感兴趣。

所以我的问题是,除了上面提到的那些之外,还有任何易于理解的教程吗?也许一些高级 libclang 用户可以写一个 :)

注意:我对为 clang 编写插件不感兴趣。

0 投票
0 回答
128 浏览

c++ - 在给定位置可见的类型名称列表

我需要一种方法来以编程方式检索在 C++ 源中的给定位置可见的所有类型名称的列表,即使源不完整(例如正在编辑)。

我了解 LibClang 可能已经在代码完成模块的底层创建了这样一个列表,但据我从规范中可以看出,它不会公开它。

现在,我不怕弄脏 Clang 源代码,但是在我开始破解它之前,有没有一种简单的方法可以让我得到我需要的东西?或者,是否有不同的库或命令行工具可以让我获取列表?

0 投票
1 回答
3331 浏览

c - 在 C 代码中静态链接 libclang

我正在尝试使用 libclang 中可用的前端为 C 代码编写一个简单的语法检查器。由于部署问题,我需要能够静态链接 libclang 中的所有库,而不是传递包含所有库的 .so 文件。

我正在从源代码构建 clang/llvm,并且在 llvm/Release+Asserts/lib 中我有一堆 .a 文件,我认为我应该能够使用它们,但它似乎从来没有工作过(链接器喷出数千有关缺少符号的错误)。但是,当我使用 libclang.so 编译它时,该目录中也存在如下:

一切似乎都运作良好。

为了使这项工作,我需要包含最少的 .a 文件集是多少?我已经尝试在构建输出目录中包含绝对所有的 .a 文件,并以不同的顺序将它们提供给 clang/gcc,但没有任何成功。我只需要 libclang 的 Index.h 中提到的函数,但似乎没有任何资源或文档说明各种 libclang*.a 文件的用途。了解 libclang.so 引入了哪些文件会非常有帮助。