How to use libclang with STL?

断了今生、忘了曾经 提交于 2019-12-04 14:10:19

问题


I'm trying to parse a library using libclang, and I'm stuck with what could be a very simple issue: how to configure it with STL? At the moment, it fails to parse a translation unit because it can't find <string>.

Here's what I tried :

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);

I'm on windows, with the precompiled clang binaries downloaded from llvm.org, and I tried with various STL implementations :

  • Visual studio
  • MingW
  • libCXX

In each case, I ended up with unknown types.

For example, with mingw, I've got the following error messages :

/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'

The rare tutorials I've found about this subject don't talk about this subject...


回答1:


Since libclang was precompiled, it doesn't know about the exact paths of the standard libraries used by your compilers. You'll have to tell it about the standard include path using -I switches in your arguments list, when calling clang_parseTranslationUnit.

Here is the command I use to find about the inclusion paths for gcc on Linux. You should be able to adapt it to MinGW in your windows environment:

$ 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.
...


来源:https://stackoverflow.com/questions/22480534/how-to-use-libclang-with-stl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!