如何在STL中使用libclang?

我试图用libclang来parsing一个库,而且我遇到了一个非常简单的问题:如何使用STL来configuration它? 目前,它无法parsing翻译单元,因为它找不到。

这是我的尝试:

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实现:

  • 视觉工作室
  • MingW平台
  • libCXX

在每一种情况下,我都以未知的types结束了。

例如,与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键入名称'off64_t'/mingw/include\io.h:301:36:错误:C ++需要所有声明的types说明符/mingw/include\io.h:302:14:错误:未知types名称'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'

我find关于这个主题的罕见的教程不谈论这个主题…

Solutions Collecting From Web of "如何在STL中使用libclang?"

由于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. ...