Разбор windows файлов проекта С ++ с помощью libclang (с базой кода V C) - PullRequest
0 голосов
/ 02 августа 2020

Мне нужно было разобрать AST моего проекта, написанного на VS C ++. Поэтому я скомпилировал llvm / clang и использовал его API для анализа AST.

Но получил следующую ошибку:

G:/Hades/Hades/source/Main.cpp:2:10: fatal error: 'memory' file not found
#include <memory>
         ^~~~~~~~

Затем я указал headerSearch для препроцессора и добавил путь: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include" к HeaderSearchOptions ( с помощью HeaderSearchOptions::AddPath) для обнаружения отсутствующих включений.

Но это вызвало много ошибок при разборе заголовков V C, вот часть журнала:

In file included from C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\memory:9:
In file included from C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\yvals_core.h:297:
In file included from C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:58:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vadefs.h:61:33: error: expected ';' after top level declarator
        typedef unsigned __int64  uintptr_t;
                                ^
                                ;
In file included from G:/Hades/Hades/source/Main.cpp:2:
In file included from C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\memory:9:
In file included from C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\yvals_core.h:297:
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:96:1: warning: declaration specifier missing, defaulting to 'int'
_CRT_BEGIN_C_HEADER
^
int
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:69:9: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        __pragma(pack(push, _CRT_PACKING)) \
        ^
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:96:1: error: use of undeclared identifier 'push'
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:69:23: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        __pragma(pack(push, _CRT_PACKING)) \
                      ^
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:96:1: error: expected ';' after top level declarator
C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.26.28801/include\vcruntime.h:70:9: note: expanded from macro '_CRT_BEGIN_C_HEADER'
        extern "C" {

Как я могу решить это? Вероятно, мне следует указать какие-то параметры где-нибудь, чтобы сообщить clang о том, как c он должен анализировать эти источники, если это источники MS?

Или я должен использовать другую кодовую базу стандартных включений? И, вероятно, я должен как-то пропустить включение типа Windows.h, потому что это только заголовок Windows?

1 Ответ

0 голосов
/ 02 августа 2020

Я знаю, что это странный обходной путь, поскольку memory.h должен быть частью стандартных библиотек.

попробуйте использовать https://developer.mindsphere.io/resources/mindconnect-lib/doxygen/html/memory_8h.html

#include "mcl/mcl_common.h"

может работать и дать все необходимое

...