如何在 STL 中使用 libclang?

Posted

技术标签:

【中文标题】如何在 STL 中使用 libclang?【英文标题】:How to use libclang with STL? 【发布时间】:2014-03-18 13:15:21 【问题描述】:

我正在尝试使用 libclang 解析库,但我遇到了一个非常简单的问题:如何使用 STL 对其进行配置? 目前,它无法解析翻译单元,因为它找不到<string>

这是我尝试过的:

char *args[] = "-x", "c++", "-Ic:/my/library/includes", "-IG:/Prog/libcxx-3.4/include";
clang_parseTranslationUnit(index, "c:/my/library/test.cpp", args, 4, 0, 0, 0);

我在 Windows 上,从 llvm.org 下载了预编译的 clang 二进制文件,我尝试了各种 STL 实现:

视觉工作室 明文 libCXX

在每种情况下,我都得到了未知类型。

例如,使用 mingw,我收到以下错误消息:

/mingw/include\wchar.h:221:71: error: unknown type name '_locale_t'
/mingw/include\wchar.h:223:81: error: unknown type name '_locale_t'
/mingw/include\stdlib.h:173:65: error: unknown type name '_locale_t'
/mingw/include\stdlib.h:175:75: error: unknown type name '_locale_t'
/mingw/include\io.h:301:14: error: unknown type name 'off64_t'
/mingw/include\io.h:301:36: error: C++ requires a type specifier for all declarations
/mingw/include\io.h:302:14: error: unknown type name 'off64_t'
/mingw/include\io.h:302:39: error: unknown type name 'off64_t'
/mingw/include\unistd.h:65:20: error: unknown type name 'off_t'

我发现的关于这个主题的罕见教程没有谈论这个主题......

【问题讨论】:

请问您是如何设法包含和链接 libclang 的? 【参考方案1】:

由于 libclang 是预编译的,它不知道编译器使用的标准库的确切路径。在调用clang_parseTranslationUnit 时,您必须在参数列表中使用-I 开关告诉它标准包含路径。

这是我用来查找 Linux 上 gcc 的包含路径的命令。您应该能够在您的 windows 环境中使其适应 MinGW:

$ echo "" | g++ -v -x c++ -E -
...
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.8
 /usr/include/x86_64-linux-gnu/c++/4.8
 /usr/include/c++/4.8/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
...

【讨论】:

以上是关于如何在 STL 中使用 libclang?的主要内容,如果未能解决你的问题,请参考以下文章

Cppy cmake 构建无法找到 LibClang

如何在 g++ 中使用不同的 STL

如何在 STL 映射中迭代 STL 映射?

如何在 WebAssembly 中使用(C++ STL 的)向量

PLC状态机编程-如何在STL中使用状态机

如何在 stl 模板中使用导出的类 (__declspec(dllexport))?