提问者:小点点

使用libclang解析windows C++项目文件(使用VC代码库)


我需要解析用VS C++编写的项目的AST。 所以我编译了llvm/clang并使用它的API解析AST。

但得到下一个错误:

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

然后,我为预处理器指定了headerSearch,并向HeaderSearchOptions添加了路径:“C:/Program Files(x86)/Microsoft Visual Studio/2019/community/vc/tools/msvc/14.26.28801/Include”(通过使用HeaderSearchOptions::AddPath)以检测缺少的包含。

但是它在解析VC报头时造成了很多错误,下面是日志的一部分:

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" {

我该怎么解决这个? 也许我应该在某处指定一些选项,让get clang知道它必须如何具体地解析这些源,如果它是MS源?

或者我必须使用标准包含的另一个代码库? 也许我必须跳过像Windows.h这样的包含,因为它只有Windows头?


共1个答案

匿名用户

我知道这是一个奇怪的变通方法,因为memory.h应该是标准库的一部分。

尝试使用https://developer.mindsphere.io/resources/mindconnect-lib/doxygen/html/memory_8h.html

#include“mcl/mcl_common.h”

可能会起作用并提供所有必要的东西

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(libclang|解析|windows|c++|项目|文件|vc|代码|库)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?