【问题标题】:Libclang API to get function definitions defined in a different fileLibclang API 用于获取在不同文件中定义的函数定义
【发布时间】:2013-08-03 21:34:05
【问题描述】:

假设我有两个文件 main.c 和 func.c func.c 是从 main.c 的 main 函数调用的。通常,我会生成 main.o 和 func.o 并且链接器会找到 func 的定义并将其绑定到它在 main .c 中的调用

现在,我想通过 libclang API 做同样的事情。这是我正在制作的 Doxygen 类型代码浏览实用程序。我能够解析这两个文件。从这里开始,我不知道如何进行。 我应该生成 *.o 文件并让 clang 链接它们吗?

谢谢,我希望我问的问题很清楚

【问题讨论】:

  • 请注意,doxygen(从 1.8.4 版开始)也可以选择使用 libclang 进行源代码浏览。所以你可能想先尝试一下,或者看看 src/clangparser.cpp 看看 doxygen 是如何做到的。

标签: c compiler-construction clang llvm libclang


【解决方案1】:

不,实际上不需要将代码编译为目标文件。

两个翻译单元中的符号之间的链接可以使用 USR(统一符号解析)建立。当您在翻译单元的 AST 中找到有趣的位置(在 libclang 中由 CXCursor 表示)时,调用 clang_getCursorUSR() 以获取关联的 USR。

如果两个 CXCursor 具有相同的 USR,即使在两个不同的翻译单元中,它们也关联到同一个符号。

【讨论】:

  • 非常感谢。虽然我不完全明白你说什么,但我明白了。我会看看 USR 和 CXCursor 并使用它们。
  • 没问题。当您遇到新问题时,请随时提出其他问题,或者如果您有更具体的问题,请完善此问题。
猜你喜欢
  • 2020-05-22
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 2011-07-29
  • 2012-10-25
相关资源
最近更新 更多