【问题标题】:How to get a list of all global declarations of a C/C++ program using Clang?如何使用 Clang 获取 C/C++ 程序的所有全局声明列表?
【发布时间】:2015-08-15 11:08:41
【问题描述】:

我正在尝试编写一个程序,使用 Clang 列出 C 或 C++ 程序的所有公开导出的变量和函数。

我关注了this tutorial 的第 5 部分,但它不适用于当前版本的 clang。除此之外,我得到some hints CompilerInstance 可以使代码更短,但我不完全确定如何使用它。

您将如何实现此功能?你能给我任何指向正确方向的指示吗?例如:是否有一个全局声明变量的大哈希表,还是我必须遍历 AST?

【问题讨论】:

标签: c++ c clang llvm


【解决方案1】:

公开导出 - 你是指带有外部链接的符号吗?

您可以在目标文件、共享库和可执行文件上使用nm,并带有--extern-only --defined-only --demangle 选项,以显示带有外部链接的已定义符号。符号类型字段告诉你它是什么类型的符号,全局变量通常有类型 B、b、C、D、d、G、g、R、r、S、s 和 W、w 用于声明的模板的静态数据成员头文件和函数范围静态。

【讨论】:

  • 是的,确实如此。但我想直接从源代码中获得符号列表,以便我可以篡改它们。
【解决方案2】:

我找到了办法。结果是AutoFFI,一个基于 Clang 构建的 FFI 绑定生成器。如果我有时间,我会发布有关如何完成的详细信息。

【讨论】:

  • 这个项目好像不存在了?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
相关资源
最近更新 更多