Ошибка при разборе системных заголовков с помощью RecursiveASTVisitor - PullRequest
1 голос
/ 23 марта 2019

Я создаю автономный инструмент с помощью libtooling. У меня есть базовый шаблонный код для FrontendAction, Consumer и Visitor. Посетитель посещает только ClassTemplateSpecializationDecl, где я просто сохраняю некоторую информацию. Все работает нормально, но если я #include <string> в файле, который я анализирую, я получил ошибку: 'stddef.h' file not found.

Я думал, что компилятор не может найти некоторые системные заголовки, но входной файл, который я анализирую, компилируется без каких-либо ошибок с помощью команды clang ++.

1 Ответ

1 голос
/ 04 июня 2019

Это очень типичная ошибка для инструментов libTooling: https://clang.llvm.org/docs/FAQ.html#id3

Некоторые заголовочные файлы (stddef.h, stdarg.h и другие) поставляются с Clang - они называются встроенными включениями. Clang ищет их в каталоге относительно местоположения двоичного файла clang. Если вы переместили двоичный файл clang, вам также необходимо переместить встроенные заголовки.

Если вы используете CMake , вы можете добавить следующий код для установки заголовков Clang:

set(CLANG_BUILTIN_HEADERS_DIR "${LLVM_LIBRARY_DIR}/clang")

install(
  DIRECTORY ${CLANG_BUILTIN_HEADERS_DIR}
  DESTINATION lib
  FILES_MATCHING PATTERN "*.h"
  )
...