Как использовать libclang с STL?

Я пытаюсь проанализировать библиотеку с помощью 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, с предварительно скомпилированными двоичными файлами Clang, загруженными с llvm.org, и я пробовал с различными реализациями STL:

  • Визуальная студия
  • MingW
  • 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'

Редкие учебники, которые я нашел по этому предмету, не говорят об этом предмете …

3

Решение

Поскольку libclang был предварительно скомпилирован, он не знает точных путей стандартных библиотек, используемых вашими компиляторами. Вам нужно будет рассказать о стандартном пути включения, используя -I переключается в списке аргументов при вызове clang_parseTranslationUnit,

Вот команда, которую я использую, чтобы найти пути включения для gcc в линуксе Вы должны иметь возможность адаптировать его к MinGW в вашей среде Windows:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]