Я пытаюсь проанализировать библиотеку с помощью 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 я получил следующие сообщения об ошибках:
/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 был предварительно скомпилирован, он не знает точных путей стандартных библиотек, используемых вашими компиляторами. Вам нужно будет рассказать о стандартном пути включения, используя -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.
...
Других решений пока нет …