Чтобы начать работать с libclang, я создаю очень простую программу, которая пытается загрузить очень простой исходный файл.Сбой с файлом 'stddef.h' не найден.
Вот программа, использующая libclang:
#include <clang-c/Index.h>
int main() {
CXIndex index = clang_createIndex(1,1);
const char *source_path = "foo.cpp";
clang_createTranslationUnitFromSourceFile(index,"foo.cpp",0,0,0,0);
}
(Для краткости я пропустил код, который не имеет отношения к воспроизведению проблемы).
И вот файлЯ пытаюсь загрузить, foo.cpp:
#include <stddef.h>
int main() {}
Я использую LLVM и Clang 6.0.1, скомпилированные из источника следующим образом:
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/local -DCMAKE_PREFIX_PATH=$HOME/local -DCMAKE_BUILD_TYPE=Release
make
make install
Быстрый поиск дает это обещаниеpost: Ошибка Clang - файл stddef не найден? К сожалению, это около llvm 3.5, и я использую llvm 6.0.1.Кроме того, каталог $ HOME / local, в который я установил LLVM и Clang, не имеет каталога / usr / lib, поэтому предлагаемое здесь решение не работает.
Заголовок stddef.h присутствует в $HOME/lib/clang/6.0.1/include/stddef.h
.Явное добавление этого пути в качестве опции -isystem к вызову clang_createTranslationUnitFromSourceFile решает проблему.
Более того, путь поиска включения, используемый clang_createTranslationUnitFromSourceFile, не совпадает с тем, который используется clang ++;clang++ foo.cpp
работает без ошибок.
Существует ли какая-либо документация по пути поиска включений, используемому clang_createTranslationUnitFromSourceFile и аналогичными функциями в libclang, чтобы я мог определить, какие пути включения необходимо добавить?
Любые другие предложения о том, как вызвать clang_createTranslationUnitFromSourceFile с правильным путем поиска включения, эквивалентным пути, используемому clang ++? *